JavaScript UIEvents被同步调试代码阻止

时间:2014-08-07 21:03:31

标签: javascript jquery-ui event-handling

我正在调试一些模糊/点击事件处理,并发现使用断点或警报弹出窗口来调试事件处理可以阻止处理其他事件。我提供了一个带有2个输入字段的jsfiddle。一个输入字段有一个blur()事件处理程序,在调用时会发出警报。如果单击输入字段以获得焦点,然后单击按钮,该按钮将触发警报弹出窗口,除非您选择的输入字段具有blur()处理程序。模糊处理程序的操作似乎阻止了click()处理程序的发生。

我发现使用断点时会发生同样的事情。使用断点代替警报具有相同的效果。在blur()中间断开将阻止click()处理程序被调用。

出现了严重的错误吗?什么是阻止这种情况发生的好方法?

http://jsfiddle.net/stconrad/vtka7tt3/

$(".text").blur(function(e){
    var x = 0;
});

$(".text2").blur(function(e){
    alert("blurred")
});

$("button").click(function(){
   alert("clicked"); 
});

1 个答案:

答案 0 :(得分:1)

您的问题归因于alert()方法。当您调用此方法时,一次只能显示一个警报。然后,在这里,几乎同时触发两个警报(几乎)。不幸的是,第二个被忽略了。

如果使用console.log()进行测试,则可以看到调试器中有两个结果。

您可以做的是使用FIFO来处理触发器。只需将您的呼叫附加到结构并弹出第一项。如果只有一个呼叫,它将与您当前的进程相同。否则,第一个将被触发,然后是另一个。

如果您正在使用阻止操作的alert()等操作,请使用回调来触发下一个操作:当完成警报时,如果存在警告则弹出下一个项目。