Javascript 在XForms中,使用Orbeon,如何通过jQuery更新XML实例?

Javascript 在XForms中,使用Orbeon,如何通过jQuery更新XML实例?,javascript,jquery,xml,orbeon,xforms,Javascript,Jquery,Xml,Orbeon,Xforms,当用户单击span元素并从jQuery更新当前XML实例时,我想在JavaScript中执行一些逻辑: (我在网上看到过两个类似的问题,但都没有得到回答!) XForms: <xhtml:span class="buttonPlusOne" id="plusVat">+</xhtml:span> <xf:output ref="instance('submitted_instance')/TotVATAmnt"></xf:output> <x

当用户单击span元素并从jQuery更新当前XML实例时,我想在JavaScript中执行一些逻辑:

(我在网上看到过两个类似的问题,但都没有得到回答!)

XForms:

<xhtml:span class="buttonPlusOne" id="plusVat">+</xhtml:span>
<xf:output ref="instance('submitted_instance')/TotVATAmnt"></xf:output>
<xf:input id="changeVatTotal" ref="instance('submitted_instance')/TotVATAmnt"></xf:input>

我可以看到Orbeon发布数据(Firebug),但是XML实例没有得到更新(输入不会更新输出,即使它们共享相同的“ref”属性)。

我假设您将html元素的id与
xf:input
元素的XForms id(
id
属性)混淆了

Orbeon文档:在
Orbeon.xforms.Document.setValue()函数调用中使用的id是(服务器端)xforms元素的id。因此,在您的示例中,它是
changeVatTotal
,而不是(客户端)html输入元素
changeVatTotal$xforms-input-1
的id。这就是为什么firebug中会出现一个对XForms实例没有影响的请求:服务器端XForms引擎找不到id为
changeVatTotal$XForms-input-1
xf:input
元素,所以它不知道如何处理该请求

这也意味着,您(通常)不需要计算目标元素的id,而只需使用xf:input的“普通”XForms id属性值

或者:

是否可以在XForms中完全处理“plus”按钮?您可以在
domcactivate
事件上使用并包含一个操作:


+

我认为这个解决方案比在客户端和服务器端做一些工作更稳定。

您好,谢谢,尝试了#changeVatTotal,同样的问题,似乎输入不会改变输出(这是不寻常的行为-它们共享相同的“ref”属性)。您认为这可能与JQuery有关吗?谢谢你的帮助,真让人沮丧,我们已经花了不少时间在这上面了!事实上,我可能与JQuery有关——您可以通过在xforms ready事件上向xf:input元素发出ORBEON.xforms.Document.setValue()来测试这一点,例如,它不依赖于JQuery。顺便问一下:您是否尝试更新触发setvalue的同一输入元素?如果您使用任何其他输入元素(即使是隐藏的元素)作为setvalue()目标,它会改变什么吗?1。我按下“+”按钮(第一个xhtml跨度)向输入添加0.01(这应该会更新输出,因为它们具有相同的“ref”)——我猜;)2.如果我在JQuery中使用了不同的id进行更新:
ORBEON.xforms.Document.setValue('invoiceDate',currValue)-它工作并且#invoiceDate input:text获得一个新值。这回答了你的问题吗?好的,那么JQuery不是cuplrit,setvalue()通常可以工作。为了找出它与#changeVatTotal不兼容的地方,我担心需要更多关于XForm的信息。您能否将xforms实例定义的相关部分添加到您的问题中?关于setvalue请求有什么说明?好的,好的,谜团解决了!3.5结论:1。确保X-Forms模型中没有自动更改您试图从JS手动更新的元素值的计算。2.当使用Orbeon API手动更新当前XML实例时,请选择X-Forms的id,而不是输入的DOM id。3.事实证明,上述问题消除后,解决了问题(仍然需要以某种方式恢复我的计算,但至少知道是什么导致头痛!)4。所有人都指责可怜的jQ嘶嘶作响;)谢谢你的帮助!