停止元素上的其他事件处理程序

nic*_*ckf 26 javascript jquery events

我正在写一个小的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;
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

问题是,如果元素上还有其他单击事件处理程序,它们仍会触发:

$('#myLink').click(function() {
    console.log("Clicked");
});
$('#myLink').preventDoubleClick();
Run Code Online (Sandbox Code Playgroud)

现在当你双击链接时,我在我的日志中得到了这个:

允许
点击
阻止
点击

所以基本上,我需要里面的click函数preventDoubleClick来阻止所有其他事件处理程序的触发.我怎样才能做到这一点?

nic*_*ckf 36

感谢Adam的链接,我能够看到我需要的功能:stopImmediatePropagation().

  • 这也适用于没有jQuery,这里是标准的文档[stopImmediatePropagation()](https://developer.mozilla.org/en-US/docs/Web/API/event.stopImmediatePropagation) (5认同)

Ada*_*der 6

我相信你正在寻找event.stopPropagation

编辑:事实证明这不是尼克目的的正确选择.请看他的回答.