Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连续触发2个JavaScript事件-忽略第2个_Javascript_Triggers_Onclick_Onchange - Fatal编程技术网

连续触发2个JavaScript事件-忽略第2个

连续触发2个JavaScript事件-忽略第2个,javascript,triggers,onclick,onchange,Javascript,Triggers,Onclick,Onchange,我在页面上有一个输入文本框和一个按钮。 在文本框上有一个onchange事件,在按钮上有一个onclick。每个事件都会触发一个完全独立的无关方法 问题如下: 如果用户对文本框进行了更改,则立即单击按钮-触发了onchange,但我丢失了onclick。 我能避免这个吗?我需要两件事都发生。 谢谢 更新: 我在本地尝试了一个非常简单的测试: <input type="text" onchange="alert1();"/> <input type="button" onclic

我在页面上有一个输入文本框和一个按钮。 在文本框上有一个onchange事件,在按钮上有一个onclick。每个事件都会触发一个完全独立的无关方法

问题如下: 如果用户对文本框进行了更改,则立即单击按钮-触发了onchange,但我丢失了onclick。 我能避免这个吗?我需要两件事都发生。 谢谢

更新: 我在本地尝试了一个非常简单的测试:

<input type="text" onchange="alert1();"/>
<input type="button" onclick="alert2();"/>
其中js是:

<script type="text/javascript">
function alert1()
{
alert("1");
}
function alert2()
{
alert("2");
}
</script>
更改文本并立即单击按钮只会触发第一个事件。有没有办法强制第二个事件发生?

警报和其他模式对话框是一种特殊情况,因为它会暂停脚本其余部分的执行,直到用户单击“确定”。这就是为什么你的第二个处理器会从裂缝中掉下来

如果您执行类似于document的操作,则在处理程序中改为写入'foo',您就不会遇到此问题。

试试这个

function showAlert1() {
    setTimeout(function(){ alert("ONE") }, 250);
}

function showAlert2() {
    setTimeout(function(){ alert("TWO") }, 250);
}​

它缓冲了每个函数的执行,因此可以触发按钮的onclick。

如果希望我们指出错误,请向我们展示一些代码。这些代码不会有帮助,我认为这是因为onchange调用ajax来刷新特定字段。在调用ajax之前,有没有一种方法可以捕捉到点击?我可以在JS代码中检查是否触发了任何其他事件吗?如果没有代码,很难说。这个简单的演示在Chrome中工作:无论发生什么,我都能得到。魔鬼通常在细节中。一旦您向服务器启动ajax查询,您就无法收回它。假设您的服务器回答速度慢,您可以停止处理答案,但我重复一遍:很难回答您的问题,因为问题太模糊了。@NinaNa:这不是很具体,似乎您做了一些事情,阻止调用真正的处理程序,或者处理程序看起来好像没有被调用。我更改了元素的innerHTML,但仍然只响应一个事件。这是一个已知的问题吗?它应该起作用吗?