题
我正在尝试在网页上拦截所有类型的表单表单。 JQuery看起来很简单: form.submit(function(e) {…})
如果我单击“提交”按钮,它可以很好地工作。
但是,在选择字段上也有一个onchange属性 this.form.submit()
看起来这个呼叫绕过我的听众(在铬/firefox中):
<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属性的方式。
如果我不犯一个愚蠢的错误,但实际上这是预期的浏览器行为,那么如果您可以解释事件流以及为什么会导致上述症状,我会感到非常高兴。
解决方案
打电话 form.submit()
方法不会触发 submit
事件,就像设置 value
文本框不会触发其 change
事件。尝试触发 submit
而是通过jQuery事件:
<form id="bar">
<select name="name" onChange="$('#bar').submit();">
<option>Foo</option>
<option>Bar</option>
</select>
<br/>
<input type="submit"/>
</form>
根据 文档, ,默认值 submit
表格上的诉讼将被解雇,并将提交表格。
不隶属于 StackOverflow