如何在Orbeon Forms中的客户端javascript中获取元素ID?

时间:2016-02-17 09:46:32

标签: javascript xhtml orbeon xforms

我是XHTML,XForm和Orbeon的新手,我在Orbeon Forms中使用客户端javascript检索HTML元素ID时遇到了问题。在普通的HTML中,我只使用了getElementById函数,Orbeon的文档建议使用function来检索元素的值(控制器在其术语中)。

  

ORBEON.xforms.Document.getValue(controlIdOrElement)

然而,使用Orbeon From(片段),例如

<xf:bind id="fr-form-binds" ref="instance('fr-form-instance')">
  <xf:bind id="section-1-bind" name="section-1" ref="section-1">
     <xf:bind id="cvr-input-bind" name="cvr-input" ref="cvr-input"/>

  (...)

<fr:section id="section-1-control" bind="section-1-bind">
  <xf:label ref="$form-resources/section-1/label"/>
    <fr:grid>
      <xh:tr>
        <xh:td>
          <xf:input id="cvr-input-control" bind="cvr-input-bind">
            <xf:label ref="$form-resources/cvr-input/label"/>
            <xf:hint ref="$form-resources/cvr-input/hint"/>
            <xf:alert ref="$fr-resources/detail/labels/alert"/>
          </xf:input>
        </xh:td>
  (...) 

getValue函数未在任何参数变体上找到值

  • CVR-输入
  • CVR-输入控制
  • CVR-输入绑定

以字符串形式给出。

当我检查生成的表单时,我看到输入元素已经获得了id section-1-control≡xf-383≡cvr-input-control ,getValue无法理解在上面的三个变种中找到它。

我已经制作了一个触发按钮 - 如下所示 - 产生预期的结果(将输入值映射到另一个控制器/元素),但我无法想象解决方案必须涉及硬编码部分 - 元素ID的一部分。

因此我的问题是:如何在最终视图中修改编码ID时检索元素/控制器(或其值)?

<xf:trigger id="get-pnumbers-btn-control" bind="get-pnumbers-btn-bind">
  <xf:label ref="$form-resources/get-pnumbers-btn/label"/>
  <xf:hint ref="$form-resources/get-pnumbers-btn/hint"/>
  <xf:alert ref="$fr-resources/detail/labels/alert"/>
  <xxf:script ev:event="DOMActivate" type="javascript">
    var cvrInputElementId = "section-1-control≡xf-383≡cvr-input-control";
    var cvrOutputElementId = "section-1-control≡xf-383≡cvr-output-control";
    var cvrInput = ORBEON.xforms.Document.getValue(cvrInputElementId);
    ORBEON.xforms.Document.setValue(cvrOutputElementId, cvrInput);
  </xxf:script>
</xf:trigger>

1 个答案:

答案 0 :(得分:0)

xxf:client-id() function解析一个id并返回客户端ID。这可能会有所帮助。然后你需要以某种方式将该id传递给脚本(对于即将到来的4.11,它是easy,但之前有点难度。)

你也可以使用jQuery,找到id以某个字符串结尾的元素:

var clientId = ORBEON.jQuery('[id $= "cvr-input-control"]').attr('id')

improve the id scheme的RFE。