问题 为什么alert()会破坏代码执行?


当我们使用 alert()有时候代码会中断。

例如:

HTML:

<span>Hi</span>

使用Javascript:

$(document).ready(function () {

    $("span").dblclick(function () {
        alert("b");
    });
    $("span").click(function () {
        alert("a");
    });

});

alert("b") 甚至没有出现。

但如果我们改变了 alert() 至 console.log,它被记录下来。

警报演示 & console.log演示

那么,发生了什么?


11350
2018-03-30 15:16


起源

我不知道为什么这甚至被贬低了。这是一个很好的问题 - But I'm Not A Wrapper Class
我很高兴找到这个问题。我甚至都不知道这一点。我以为我的代码中有一个错误,因为它没有正确执行。取出警报后它工作正常:D - Sarah


答案:


alert 打开模型对话。打开时,除了警报本身外,您无法与页面的任何部分进行交互。

由于您无法与页面进行交互,因此双击的后半部分无法到达跨度,因此双击事件不会触发。


8
2018-03-30 15:22



另一个类似问题: stackoverflow.com/questions/10173843/... 警报获得焦点,因此第二次点击不会发生在页面上。 - Raul Guiu


运用 alert() 停止所有代码执行。如果您已经捕获单击停止代码执行,则无法捕获双击。

为了证明,我已经注释掉了 alert 单击你的小提琴。你可以看到 这里 双击时现在发生警报。


3
2018-03-30 15:23





因为您正在捕获第一次单击并显示警报。第二次单击不会被捕获,因为警报现在具有焦点。

如果您登录到控制台,则两次点击都会被捕获,您会注意到“a”会被记录两次。


1
2018-03-30 15:22





有一些函数可以在调用代码时阻止代码运行。这称为同步函数,在您单击之前会导致代码暂停 OK。 alert()是同步的,因此是prompt()。这会导致click事件发生并暂停代码运行,因此不再发生双击事件......


1
2018-03-30 15:23