Подтвердить что ты не робот

Остановить дополнительные обработчики событий на элементе

Я пишу небольшое расширение jQuery, которое не позволяет пользователю дважды щелкнуть ссылку.

$.fn.preventDoubleClick = function() {
    return this.click(function() {
        var $t = $(this)
            , retVal = $t.data('active')  // check the internal flag
        ;
        if (retVal || retVal === undefined) { // if ON...
            $t.data('active', false);  // set the internal flag to OFF
            setTimeout(function() {
                $t.data('active', true);
            }, 1000);  // after 1 second, set the internal flag to ON
            console.log("allowed");
            return true;
        } else {  // if OFF...
            console.log("blocked");
            return false;
        }
    });
};

проблема в том, что если на элементах есть другие обработчики событий кликов, они все равно запускают:

$('#myLink').click(function() {
    console.log("Clicked");
});
$('#myLink').preventDoubleClick();

И теперь, когда вы дважды щелкаете по ссылке, я получаю это в своем журнале:

разрешено
щелкнул
заблокирован
нажал

В принципе, мне нужна функция click внутри preventDoubleClick, чтобы остановить все другие обработчики событий. Как я могу это сделать?

4b9b3361

Ответ 1

Благодаря ссылке Адама я смог увидеть нужную мне функцию: stopImmediatePropagation().

Ответ 2

Я считаю, что вы ищете event.stopPropagation

EDIT: выясняется, что это был неправильный вариант для целей Ника. Посмотрите его ответ.