2010-10-18 98 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