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 に答える