跳到内容

XForms/在文本区域框中插入 BBcode 的触发器

来自维基教科书,开放的书籍,开放的世界

使用触发器将 BBcode 或其他文本添加到输入或文本区域控件

[编辑 | 编辑源代码]

这是一个简单的方法,使用按钮(触发器)将常用的文本添加到您的 xforms-input 或 xforms-textarea 控件。这可以是许多东西,例如 BBcode(粗体/非粗体代码)、日期时间戳、常用的格式化文本(例如信头、签名块)、不容易记住的特殊代码——所有这些都取决于您的表单的用途和您的特定需求。

[编辑 | 编辑源代码]

加载示例 XForms 应用程序


一个更高级的示例,用于在文本的开头或结尾插入(带有一些额外的代码插入,例如链接和图像)

加载示例 XForms 应用程序

程序结构

[编辑 | 编辑源代码]

为了简化,我们在模型/实例中使用单个 <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"/>
下一页: 多个模型比较 | 上一页: 增量模型加载
首页: XForms
华夏公益教科书