2011-12-20 15 views
6

我有了兩個提交按鈕的表單手動提交表單。我想使用JavaScript手動提交表單,並使用輸入按鈕將表單提交與其他表單元素一起提交,就像表單自動提交一樣。關於這個問題有很多討論,但我找不到答案。使用JavaScript不會發送提交按鈕

<form method="post" action="echoToScreenAndLog.jsp" id="form1"> 
    <input id="field1" name="field1"/> 
    <input type="text" size="20" id="field2" name="field2"/> 

    <input type="submit" value="Do One" name="sub1_name" id="sub1_id"/> 
    <input type="submit" value="Do Two" name="sub2_name" id="sub2_id"/> 
</form> 

當窗體上方用「做一」按鈕提交,張貼的參數是field1="xxx"field2="yyy"sub1_name="Do One"

但我想手動提交表單...

<form method="post" action="echoToScreenAndLog.jsp" id="form1"> 
    <input id="field1" name="field1"/> 
    <input type="text" size="20" id="field2" name="field2"/> 

    <input type="submit" value="Do One" name="sub1_name" id="sub1_id"/> 
    <input type="submit" value="Do Two" name="sub2_name" id="sub2_id"/> 
</form> 
<script type="text/javascript"> 
    var btn = document.getElementById('sub1_id'); 
    btn.onclick=function() { 
     return mySubmit(document.getElementById('form1'), ...); 
    } 
</script> 

但在mySubmit功能做手工提交表單不發佈sub1_name參數。我可以理解 - 我已經繞過了提交,所以表單沒有使用按鈕提交,因此發佈代表用於提交表單的按鈕的參數是沒有意義的。

當我看形式在onclick處理程序中的元素,我可以看到兩個按鈕。我不是由過於驚訝要麼,他們畢竟是在表單上的元素,但我不明白的是,如果我加我onclick處理程序中的元素,然後我添加的元素張貼和兩個原始提交按鈕沒有發佈。剛剛完成的圖片,下面是添加元素的代碼:

<script type="text/javascript"> 
    var btn = document.getElementById('sub1_id'); 
    btn.onclick=function() { 
     var f = document.getElementById('form1'); 
     var s = document.createElement("input"); 
     s.type="hidden"; s.name="xsubmit_name"; s.value="Bob"; s.id="xsubmit_id";    
     f.appendChild(s); 

     // s gets posted 
     return mySubmit(f, ...); 
    } 
</script> 

添加輸入元素可以爲我工作,但我很困惑的瀏覽器是如何知道後我添加的元素,而不是原來的兩個輸入元素。

謝謝。

+0

f是隻是一個指針的形式,從而更新結轉。您只需捕捉觸發您的功能的按鈕並將其放入元素中即可。爲什麼你會擔心添加自定義提交呢?我認爲你可以嘗試添加一個onclick方法,它會返回true或false,從而決定天氣或不按照默認方法提交數據,只是在那裏檢查數據,並將實際提交的內容留給瀏覽器。希望這可以起作用,至少對於它的超鏈接。 – ted 2011-12-20 12:47:38

+0

'mySubmit'到底做了什麼?任何原因你不能使用表單的'onsubmit'並且在你做了你需要在腳本中做的每一件事情之後讓表單正常提交? – RoToRa 2011-12-20 12:49:10

回答

4

specification說,對於表單提交的第一個步驟是:

步驟一:確定成功控制

「成功控制」 被定義爲:

甲提交成功的控制是「有效的」。每個成功的控件都將其控件名稱與其當前值配對,作爲提交的表單數據集的一部分。必須在FORM元素中定義一個成功的控件,並且必須具有控件名稱。

但是:

...

  • 如果表單包含一個以上的提交按鈕,只有激活提交按鈕是成功的。

由於沒有任何提交按鈕被激活,所以都不會被髮送。另一方面,隱藏的輸入元素是有效的,只會一起提交。請注意,調用之前mySubmit()添加隱藏要素,所以在時間上執行上述步驟(即期間提交),隱藏元件僅僅是形式的另一成功控制部分,並且因此發送。

2

可以使用

var btn = document.getElementById('sub1_id'); 
btn.onsubmit=function() { 
    return false; 
} 

btn.onclick=function() { 
    var f = document.getElementById('form1'); 
    var s = document.createElement("input"); 
    s.type="hidden"; s.name="xsubmit_name"; s.value="Bob"; s.id="xsubmit_id";    
    f.appendChild(s); 

    f.submit() 
}