XForms/在文本区域框中插入 BBcode 的触发器
外观
< XForms
这是一个简单的方法,使用按钮(触发器)将常用的文本添加到您的 xforms-input 或 xforms-textarea 控件。这可以是许多东西,例如 BBcode(粗体/非粗体代码)、日期时间戳、常用的格式化文本(例如信头、签名块)、不容易记住的特殊代码——所有这些都取决于您的表单的用途和您的特定需求。
一个更高级的示例,用于在文本的开头或结尾插入(带有一些额外的代码插入,例如链接和图像)
为了简化,我们在模型/实例中使用单个 <text/> 元素来保存我们的示例输入。除了提供一个更大的文本区域来进行测试外,样式并不是真正必要的。
表单的真正力量和简洁之处在于 xforms-setvalue 元素的 value 属性,它本身位于 xforms-trigger 内部。
value="concat(//text,'whatever you desire goes here')"
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:ev="http://www.w3.org/2001/xml-events">
<head>
<title>Insert BB code</title>
<style type="text/css"> <!--mozilla specific style-->
@namespace xf url('http://www.w3.org/2002/xforms');
xf|textarea .xf-value{ width:25em; height:20ex; }
</style>
<xf:model>
<xf:instance>
<data xmlns="">
<text/>
</data>
</xf:instance>
</xf:model>
</head>
<body>
<xf:trigger><xf:label>Bold</xf:label>
<xf:action ev:event="DOMActivate">
<xf:setvalue ref="//text" value="concat(//text,'[b][/b] ')"/>
<xf:setfocus control="textArea"/>
</xf:action>
</xf:trigger><br/>
<xf:textarea id="textArea" ref="//text">
<xf:label>Post:</xf:label>
</xf:textarea>
</body>
</html>
此解决方案只会将插入的代码/文本附加到文本框中当前文本的末尾。要始终将其置于开头,只需更改 concat 函数中参数的顺序(参见上面的第二个示例链接)。
限制:此解决方案无法将代码/文本插入文本框中当前文本的中间。
您可以使用 html 实体来完成复杂的格式,例如信头(如果您需要保留空格或粗体等) (!!注意:&符号被百分号替换,因为我不知道如何在维基教科书中转义 html 实体)
<xf:setvalue ref="//text" value="concat(//text,'
%lt;div xmlns=%quot;http://www.w3.org/1999/xhtml%quot;%gt;
%lt;p%gt;%lt;b%gt;Testing insert with HTMLentities%lt;/b%gt;
%lt;/p%gt;
%lt;p%gt;%lt;i%gt;Testing Insertwith HTMLenitites%lt;/i%gt;
%lt;/p%gt;
%lt;pre%gt; Indent Here%lt;/pre%gt;
%lt;/div%gt;')"/>
在这种情况下,请确保您的 xforms-output 具有 mediatype 属性,如下所示
<xf:output ref="//text" mediatype="application/xhtml+xml"/>