如何使用类选择器覆盖 id 选择器的 jQuery 事件处理程序?

Posted

技术标签:

【中文标题】如何使用类选择器覆盖 id 选择器的 jQuery 事件处理程序?【英文标题】:How can I override a jQuery event handler of an id selector with a class selector? 【发布时间】:2012-02-18 22:38:13 【问题描述】:

我有几个带有 id 和类选择器的元素的点击事件处理程序:

$(function() 
    $("#cancelOrderLink").click(function() 
        if (confirm("If you continue, all items will be removed " +
            "from your cart. This action cannot be undone. Continue " +
            "and empty cart?"))
            $("form#clearCartForm").submit();
    );

    $(".updateItemLink").click(function()
        $(this).closest("form").submit();
    )
);

但是,我想添加逻辑以防止在元素具有特定类名时触发这些处理程序:

$(function() 
    $(".superUser").click(function() 
        $("#message").html("This action is not allowed when acting as a Super User.<br />");

        return false;
    );
);

如何用第二个 sn-p 覆盖第一个 sn-p 中的处理程序?

【问题讨论】:

【参考方案1】:

event.stopPropagation(); 添加到您的代码中:

$(".superUser").click(function(e) 
   e.stopPropagation();
   ...

或者,如果元素相等,并且您没有任何其他click 侦听器,则取消绑定之前的方法:

$(".superUser").unbind('click').click(function() 

如果您想在运行时为特定 ID 绑定事件,而不是类名,请使用:

$("#cancelOrderLink").not('.superuser').click(function() 

【讨论】:

【参考方案2】:

您可以使用.not() 过滤器。

$(function() 
    $("#cancelOrderLink").not(".superUser").click(function() 
        if (confirm("If you continue, all items will be removed " +
            "from your cart. This action cannot be undone. Continue " +
            "and empty cart?"))
            $("form#clearCartForm").submit();
    );
);

【讨论】:

【参考方案3】:

我建议使用“return false”而不是 e.stopPropagation()。这是停止传播和防止默认值的更简单的方法。 例如:

$("#yourclass").click(function()
return flase;
);

【讨论】:

想想你需要什么。 stopPropagation 正是需要的,因为您不想让该事件进一步冒泡,在这种情况下,除了停止传播(通过调用完全相同的函数 github.com/jquery/jquery/blob/2.1.1/src/event.js#L393-L396)之外,返回 false 的其他事情都不需要。 (它也会停止回调执行)阅读此链接:fuelyourcoding.com/jquery-events-stop-misusing-return-false!

以上是关于如何使用类选择器覆盖 id 选择器的 jQuery 事件处理程序?的主要内容,如果未能解决你的问题,请参考以下文章

选择器的优先级

分针网——每日分享: jquery选择器的用法

JQuery选择器

JQuery中的选择器

JQuery选择器--------页面效果

将jquery选择器的属性放入数组