【问题标题】:Dynamically removeClass from the element but Click event still can be detected从元素中动态删除类,但仍然可以检测到 Click 事件
【发布时间】:2020-11-29 17:44:48
【问题描述】:

我的按钮是这样的:

<a class="h-modal-btn branch-modal-btn"> Buy Now </a>

场景是我想根据URL传递的查询字符串删除类并为按钮添加属性。省略上面的步骤,我就这样做了

$('a.branch-modal-btn').removeClass('h-modal-btn');

当我通过检查开发人员工具检查该类是否被删除时。好吧,该类已从 HTML 中删除。伟大的!但是马上我发现下面的代码还在执行。

$('.h-modal-btn').on('click', function() {
    // Do somthing
)}

这太令人沮丧了!请帮助我,我将不胜感激。

【问题讨论】:

标签: javascript html jquery css


【解决方案1】:

代替:

$('.h-modal-btn').on('click', function() {
    // Do somthing
)}

使用这个:

$(document).on('click', '.h-modal-btn', function() {
    // Do somthing
)}

或者你可以使用这个:

$('a.branch-modal-btn').off("click").removeClass('h-modal-btn');

【讨论】:

    【解决方案2】:

    这是因为您在移除该类之前已将事件侦听器分配给该按钮。现在已经附加了事件监听器。像这样更改类名不会帮助您不再触发侦听器。

    因此,您需要从这些元素中手动移除侦听器。您可以为此使用unbind 或更新的off 方法。

    $('a.branch-modal-btn').off("click").removeClass('h-modal-btn');
    

    【讨论】:

    • 不确定谁投了反对票 - 但我 +1 以获得一个好的答案。
    • 或者他可以将事件监听器放到一个祖先元素上,这样它就应该监听变化——比如$('.someAncestorElementClass').on('click', '.h-modal-btn', function(){})AKA 委托事件。但我猜最终结果是一样的,只是另一种方式。 +1 来自我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多