xforms:submit 事件在提交发生之前引发,并且可以实现提交之前对节点值的任何更改。
我试过这样做,我可以看到浏览器上的值正在改变,但保存的节点仍然有旧数据。对此有任何想法。
<xforms:submission id="save-instance" ref="instance('form-instance')"
action="{instance('temp-instance')/submit-url}" method="post" validate="false" replace="none">
<xforms:action ev:observer="save-instance" ev:event="xforms-submit">
<xforms:message level="modal" value="'About to Submit'" />
<xxforms:script>
ORBEON.xforms.Document.setValue("location-of-dda-id-a", 'Test3');
</xxforms:script>
</xforms:action>
<xforms:action ev:observer="save-instance" ev:event="xforms-submit-done">
<xforms:message level="modal" ref="instance('metaData')/save-success-msg" />
</xforms:action>
<xforms:message ev:event="xforms-submit-error" level="modal" ref="instance('metaData')/save-error-msg" />
</xforms:submission>
id location-of-dda-id-a
是为输入字段指定的 id。
基本上,我想替换从 MS 文档复制和粘贴的特殊字符。下面是可以实现的Js函数。
var specialChars = [/\u0011/g, /\u0012/g, /\u0013/g, /\u0014/g, /\u0016/g, /\u2018/g, /\u2019/g, /\u201c/g, /\u201d/g, /\u2026/g, /\u2013/g, /\u2219/g, /\u2022/g,/\u00BF/g];
var specialCharsReplacement = ["", "", "", "", "", "'", "'", "\"", "\"", "...","-","-","-","?"];
function replaceSpecialChars(formName)
{
for(i = 0; i < formName.elements.length; i++)
{
if (formName.elements[i].type == 'textarea' || formName.elements[i].type=='text')
{
var commentText = formName.elements[i].value;
if(commentText != 0)
{
for(j = 0; j < specialChars.length; j++)
{
commentText = commentText.replace(specialChars[j], specialCharsReplacement[j]);
}
formName.elements[i].value = commentText;
}
}
}
}
和线
formName.elements[i].value = commentText;
应替换为
ORBEON.xforms.Document.setValue(formName.elements[i].id.split("\$")[0], commentText);
但它不起作用。
最佳答案
这是一个棘手的问题:您说 xforms-submit
操作在提交完成之前运行是正确的,但这发生在服务器上,而 xxforms:script
在浏览器上运行,其他一切都在服务器上执行之后。所以在使用 xxforms:script
时需要小心一些。
在这种情况下,最好使用 xforms:setvalue
而不是 xxforms:script
来设置值。 (一般情况下,XForms 无法完成的事情最好保留 xxforms:script
。)
关于javascript - 在 xforms :submit event does not reflect into the model instance 上使用 javascript 更改节点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13954673/