0

フォームを新しいウィンドウに送信してから、元のウィンドウの同じフォームにわずかに変更された値を送信する必要があります。私はそれを行うために次の機能を持っています。

//Now lets create the page making function!
function createInternetPage() {

//Start by checking to see if the internet page has been requested. 
req_int = document.getElementById("marterial_internet").checked;

    if (req_int == true){
        //If it has, create the internet page.
//Send the completed form to submit in a new window, creating the broadcast page. 
document.getElementById("new_material").setAttribute("target","_blank");
document.forms["new_material"].submit();

//Add "(Internet)" to the current form title
var title = document.getElementById("material_title").value;
var title_new = title + " (Internet)";
title = document.getElementById("material_title").value = title_new;

//Then submit the form on the existing window to make the internet page. 
document.getElementById("new_material").setAttribute("target","_self");
document.forms["new_material"].submit();
        }

        //If it has not been requested then just submit the normal form. 
        else {
            //alert("NOT Checked");
            document.getElementById("new_material").setAttribute("target","_self");
            document.forms["new_material"].submit();
        }

}

元のウィンドウのフォームが送信されないことを除いて、すべてがうまく機能します。material_title の値を変更して、その後に " (Internet)" を追加しますが、フォームは送信しません。

これがなぜなのか、これを機能させるための回避策はありますか?

編集: setTimeout 遅延を追加すると、以下を参照してください。同じことが起こっています。最後のフォーム送信を除いて、すべてが実行されます。

function delay() {
    //Send the completed form to submit in a new window, creating the broadcast page. 
document.getElementById("new_material").setAttribute("target","_blank");
document.forms["new_material"].submit();

}
function delay2(){
    var title = document.getElementById("material_title").value;
var title_new = title + " (Internet)";
title = document.getElementById("material_title").value = title_new;

//Then submit the form on the existing window to make the internet page. 
document.getElementById("new_material").setAttribute("target","_self");
document.forms["new_material"].submit();
}

//Now lets create the page making function!
function createInternetPage() {

//Start by checking to see if the internet page has been requested. 
req_int = document.getElementById("marterial_internet").checked;

    if (req_int == true){
        //If it has, create the internet page.
delay()
//Add "(Internet)" to the current form title
setTimeout('delay2()',10000);
        }

        //If it has not been requested then just submit the normal form. 
        else {
            //alert("NOT Checked");
            document.getElementById("new_material").setAttribute("target","_self");
            document.forms["new_material"].submit();
        }

}
4

1 に答える 1

0

フォームがアクションを実行するのに十分な時間がありません。リクエストを分割する必要があります。2 番目のアクションを実行するには、setTimeout を使用します。

同じドメインに送信する場合は、常に Ajax を使用して最初の送信を行うことができ、新しいウィンドウを開く必要はありません。

より良いのは、サーバーにリクエストを処理させ、2 回目の送信を行うことです。

于 2012-10-30T16:22:43.763 に答える