停止在元素上继续执行事件处理程序。

10 浏览
0 Comments

停止在元素上继续执行事件处理程序。

我正在编写一个小的jQuery扩展,以防止用户双击链接。

$.fn.preventDoubleClick = function() {
    return this.click(function() {
        var $t = $(this)
            , retVal = $t.data('active')  // 检查内部标志
        ;
        if (retVal || retVal === undefined) { // 如果是ON...
            $t.data('active', false);  // 将内部标志设置为OFF
            setTimeout(function() {
                $t.data('active', true);
            }, 1000);  // 1秒后,将内部标志设置为ON
            console.log("允许");
            return true;
        } else {  // 如果是OFF...
            console.log("阻止");
            return false;
        }
    });
};

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

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

现在,当你双击链接时,我的日志中会出现以下内容:

allowed

clicked

blocked

clicked

所以基本上,我需要preventDoubleClick内部的点击函数停止所有其他事件处理程序的触发。我该如何做到这一点?

0