0

Here is the code I borrowed from other posts, but it only works in FF and not in Chrome, Opera, Safari, nor IE:

//Collect all forms in document to one and post it 

function submitAllDocumentForms() {

    var arrDocForms = document.getElementsByTagName('form');
    var formCollector = document.createElement("form");

    with(formCollector){
        method = "post";
        action = "saveSession.php";
        name = "formCollector";
        id = "formCollector";
    }
    for(var ix=0;ix<arrDocForms.length;ix++) {
        appendFormVals2Form(arrDocForms[ix], formCollector);
    }
    document.body.appendChild(formCollector);
    formCollector.submit();

}

// Function: add all elements from ``frmCollectFrom´´ 
// and append them to ``frmCollector´´ before returning ``frmCollector´´

function appendFormVals2Form(frmCollectFrom, frmCollector) {

    var frm = frmCollectFrom.elements; 
    var nElems = frm.length;
    for(var ix = nElems - 1; ix >= 0 ; ix--)
        frmCollector.appendChild(frm[ix]);
        return frmCollector;
}

I think must have multiple forms on the same page for summing up input values to the correct field. It would be a major rework even if possible.

4

1 回答 1

1

不要指望这适用于所有浏览器。一旦提交了一个表单,浏览器的“浏览上下文”(需要一个更好的词)就会致力于看到该新请求通过,除非或直到用户通过按下浏览器停止按钮取消它。

因此,一旦提交了表单,就不能(或者更确切地说:不应该)提交任何其他表单。您可以使用 FF/Gecko 的事实只是意味着他们已经实现了他们的浏览器,因此这是可能的,但各种 Web 标准的任何部分都没有规定这必须是可能的。

改写:提交表单会将 Javascript 执行上下文置于一个新状态,在这种状态下,除了 Firefox 的情况外,新的表单提交是不可能的,因为另一个当前正在进行中。

您最好的解决方案是使用 AJAX(或只是 XmlHttpRequest)异步触发各种 POST 请求。使用它并不是一项艰巨的任务 - 但我怀疑你可能做的一切都完全错误。为什么您首先需要执行此任务?

于 2012-08-31T01:55:22.627 回答