Остановить дальнейшие обработчики событий для элемента - PullRequest
27 голосов
/ 14 апреля 2009

Я пишу небольшое расширение 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();

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

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

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

Ответы [ 2 ]

35 голосов
/ 14 апреля 2009

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

6 голосов
/ 14 апреля 2009

Я полагаю, вы ищете event.stopPropagation

РЕДАКТИРОВАТЬ: оказывается, это был неправильный вариант для целей Ника. Пожалуйста, смотрите его ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...