如何在 Orbeon Forms 的客户端 javascript 中获取元素 ID?
How to get element id in client-side javascript in Orbeon Forms?
我是 XHTML、XForm 和 Orbeon 的新手,我有一个关于使用客户端 javascript 检索 HTML 元素 ID 的问题Orbeon 形式。在正常的 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 在上面的三个变体上找不到它是有道理的。
我制作了一个触发按钮——如下所示——它产生了预期的结果(将输入值映射到另一个 controller/element),但我无法想象解决方案必须涉及困难-编码元素 ID 的部分。
因此我的问题是:当编码 ID 在最终视图中被修改时,如何检索 element/controller(或其值)?
<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>
即将到来的 4.11 xxf:client-id()
function resolves an id and returns the client id. That could be helpful. Then you need somehow to pass that id to the script (which is easy 但之前有点难)。
也可以使用jQuery,查找以id
结尾的某个字符串的元素:
var clientId = ORBEON.jQuery('[id $= "cvr-input-control"]').attr('id')
improve the id scheme收到 RFE。
我是 XHTML、XForm 和 Orbeon 的新手,我有一个关于使用客户端 javascript 检索 HTML 元素 ID 的问题Orbeon 形式。在正常的 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 在上面的三个变体上找不到它是有道理的。
我制作了一个触发按钮——如下所示——它产生了预期的结果(将输入值映射到另一个 controller/element),但我无法想象解决方案必须涉及困难-编码元素 ID 的部分。
因此我的问题是:当编码 ID 在最终视图中被修改时,如何检索 element/controller(或其值)?
<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>
即将到来的 4.11 xxf:client-id()
function resolves an id and returns the client id. That could be helpful. Then you need somehow to pass that id to the script (which is easy 但之前有点难)。
也可以使用jQuery,查找以id
结尾的某个字符串的元素:
var clientId = ORBEON.jQuery('[id $= "cvr-input-control"]').attr('id')
improve the id scheme收到 RFE。