javascript - 在 xforms :submit event does not reflect into the model instance 上使用 javascript 更改节点值

标签 javascript orbeon xforms

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/

相关文章:

javascript - bluebird - 函数返回 promise 对象而不是实际数据

java - 为什么 Orbeon 创建这么大的 org.orbeon.oxf.cache.MemoryCacheImpl 对象?

xforms - 在 xxforms-iteration-moved 上重新初始化 XBL 组件

xpath - 如何计算 XPath 或 XQuery 中的加权平均值?

从 XSD 以编程方式生成的 XML 编辑器需要 Javascript 库

javascript - 如何检索 x 形式的值 :select in orbeon forms on client side (in JavaScript)

xslt - 如何向所有子节点插入属性

javascript - 解析多态 XML

javascript - Ajax查询JSON数据不返回数据

javascript - GWT JSNI 找不到最近创建的元素