编程语言
首页 > 编程语言> > javascript – 由onchange默默杀死的Onsubmit事件

javascript – 由onchange默默杀死的Onsubmit事件

作者:互联网

如果同时调用,Onsubmit事件可以默默地杀死onchange事件.我假设js引擎中的竞争条件.测试了chrome,FF3,FF6和IE9.

要重现,您需要更改输入内容并单击“提交”按钮.不要在输入更改和提交按钮单击之间进行任何额外点击.

<div id="somediv">
    <div>one</div>
    <div>two</div>
</div>
<form method="POST" id="someform">
    <input type="text" name="input1" id="someinput" value="change me" />         
    <input type="submit" />
</form>
<script type="text/javascript">
    document.getElementById('someinput').onchange = function() {
        //some delay - DOM operations, AJAX or alert:
        document.getElementById('somediv').getElementsByTagName('div')[1].style.display = 'none';
        //or alert('123');
    }
    document.getElementById('someform').onsubmit = function() {
        alert('This event is not called');
    }
</script>

预期的行为:onchange事件,而不是onsubmit.

如果我们使用按钮而不是提交并一个接一个地调用事件 – 一切都按预期工作.

如果onchange事件中没有操作(没有延迟) – 按预期工作.

如果onchange将改变div的颜色(不显示) – 有时(3/10)按预期工作,大声笑.

js-guru,请解释,到底是怎么回事?

解决方法:

onsubmit就像onclick一样,它需要连续的onmousedown和onmouseup事件.如果您的代码显示一个对话框(例如警报)或在onmouseown事件后替换该按钮,则不会触发随后的onmouseup,从而取消该事件.用somediv交换文本框和按钮应该会有所帮助.

标签:javascript,events,browser,dom-events
来源: https://codeday.me/bug/20190826/1732708.html