2010-10-18 96 views
6

我想攔截網頁上的特定表單的所有表單提交。它看起來非常簡單,jQuery:form.submit(function(e) {…}),如果點擊提交按鈕,它的效果非常好。如何攔截表單可靠地提交?

但是也有一個選擇字段,不this.form.submit()的OnChange屬性和它看起來像這樣的呼叫繞過我的聽衆(在鉻/火狐):

<script type="text/javascript"> 
    function submitForm(e) { 
     window.alert('submitted'); 
     e.preventDefault(); 
     return false; 
    } 

    $(document).ready(function() { 
     $('#bar').submit(submitForm); 
    }); 
</script> 

<form id="bar"> 
    <select name="name" onChange="this.form.submit()"> 
     <option>Foo</option> 
     <option>Bar</option> 
    </select> 
    <br/> 
    <input type="submit"/> 
</form> 

顯然,在上面的代碼,我可以只改變this.form.submit()作爲我提交監聽器的具體參考。然而,在我的真實應用程序中並不那麼簡單,所以我正在尋找不需要修改onChange屬性的方式。

如果我沒有做一個愚蠢的錯誤,但其實這是預期的瀏覽器行爲,我會很高興,如果你能解釋事件流,爲什麼這會導致上述症狀。

+0

哦,忘了提,「$(‘#條’)。提交()」,爲的onChange部分工程,以及。 JS是否對onX屬性執行某種「早期綁定」? – 2010-10-18 09:03:47

回答

10

調用form.submit()方法不會觸發submit事件,就像例如。設置文本框的value不會觸發其change事件。試圖通過jQuery的觸發事件submit改爲:

<form id="bar"> 
    <select name="name" onChange="$('#bar').submit();"> 
     <option>Foo</option> 
     <option>Bar</option> 
    </select> 
    <br/> 
    <input type="submit"/> 
</form> 

按照documentation,表格上的默認submit動作將被解僱,表單將被提交。

+1

這是一個onchange的替代品,它不需要知道表單id:'onchange =「$(this.form).submit()」' – Tobia 2014-04-11 08:13:40