Почему 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, он заносится в журнал.

Alert Demo и консоль .log Demo

Итак, что происходит?

Ответ 1

alert открывает диалог модели. Когда он открыт, вы не можете взаимодействовать с какой-либо частью страницы, кроме самого оповещения.

Поскольку вы не можете взаимодействовать со страницей, вторая половина двойного щелчка не может достичь диапазона, поэтому событие двойного щелчка не будет срабатывать.

Ответ 2

Использование alert() останавливает выполнение всего кода. Было бы невозможно зафиксировать двойной щелчок, если вы уже фиксируете единственный щелчок на остановке выполнения кода.

Чтобы продемонстрировать, я прокомментировал alert за один клик в вашей скрипке. Вы можете видеть ЗДЕСЬ, что теперь предупреждение происходит при двойном щелчке.

Ответ 3

Потому что вы ловите первый щелчок и показываете предупреждение. Второй щелчок не попадает, потому что теперь в центре внимания находится предупреждение.

Если вы заходите на консоль, то оба щелчка поймаются, и вы заметите, что "a" дважды регистрируется.

Ответ 4

Есть несколько функций, которые останавливают выполнение кода при их вызове. Это называется синхронными функциями, вызывающими паузу в коде, пока вы не нажмете OK. alert() является синхронным и поэтому является подсказкой(). Это приводит к тому, что событие click имеет место и приостанавливает выполнение кода, поэтому не происходит больше событий двойного щелчка...