onsubmit事件默默的onchange杀害 [英] Onsubmit event silently killed by onchange

查看:149
本文介绍了onsubmit事件默默的onchange杀害的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

onsubmit事件可以静静地杀死onchange事件,如果同时调用。我承担JS引擎竞争状态。经测试,在铬,FF3,FF6和IE9。

Onsubmit event can silently kill onchange event, if called simultaneously. I assume race condition in js engine. Tested in chrome, FF3, FF6 and IE9.

要重现你需要改变输入的内容,并点击提交按钮。不要让输入变化之间的任何额外的点击和提交按钮的点击。

To reproduce you need to change contents of input and click on submit button. Do not make any additional clicks between input change and submit button click.

<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

Expected behavior: onchange event, than onsubmit.

如果我们使用按钮而不是提交并称之为事件此起彼伏 - 一切正常。

If we use button instead of submit and call events one after another - everything works as expected.

如果没有在onchange事件无操作(无延迟) - 按预期工作

If there is no operations (no delay) in onchange event - works as expected.

如果将平变化改变div的颜色(不显示) - 有时(3/10)按预期工作,哈哈

If onchange will change div's color (not display) - sometimes (3/10) works as expected, lol.

JS-大师,请解释一下,这到底是怎么回事?

js-guru, please, explain, what the hell is going on?

推荐答案

的onsubmit 就像的onclick ,这就要求 onmousedown事件 onmouseup 事件连续。如果你的code显示一个对话框(例如警报)或 onmouseown 事件之后取代了按钮,随之而来的 onmouseup 是不是解雇,因而取消了此次活动。交换文本框和按钮,somediv应该有所帮助。

onsubmit works like onclick, which requires onmousedown and onmouseup events consecutively. If your code shows a dialog (eg. alert) or replaces the button after onmouseown event, consequent onmouseup is not fired and thus cancels the event. Swapping the textbox and button with somediv should help.

这篇关于onsubmit事件默默的onchange杀害的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆