使用一个Javascript函数提交多个表单可以在FF中工作,而不需要其他浏览器

Submitting Multiple Forms with one Javascript function works in FF and no other browser

本文关键字:FF 工作 浏览器 其他 不需要 表单 一个 Javascript 提交 函数      更新时间:2023-09-26

这是我从其他帖子中借来的代码,但它只适用于FF,不适用于Chrome、Opera、Safari或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;
}

我认为必须在同一页上有多个表单,以便将输入值汇总到正确的字段。即使可能,这也将是一次重大的返工。

不要指望这在所有浏览器上都能工作。提交表单后,浏览器的"浏览上下文"(因为没有更好的词)将致力于看到新请求通过,除非或直到用户按下浏览器的"停止"按钮取消它。

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

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

解决方案的最佳选择是使用AJAX(或只是XmlHttpRequest)异步触发各种POST请求。使用它并不是一项大任务,但我怀疑你可能做的每件事都完全错了。为什么你首先需要执行这个任务?