我正在尝试在网页上拦截所有类型的表单表单。 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 表格上的诉讼将被解雇,并将提交表格。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top