当前位置:  开发笔记 > 编程语言 > 正文

删除类不会禁用与删除的类关联的事件侦听器函数

如何解决《删除类不会禁用与删除的类关联的事件侦听器函数》经验,为你挑选了1个好方法。

我做了一个小提示来证明我的问题.

我有问题关闭一个类激活的功能,任何想法?

$(document).ready(function(){

  $('.changeText').click(function(){
    $(this).html( $(this).html() == 'Test' ? 'Changed' : 'Test' );
  });

  $('.changeBG').click(function(){
    $(this).css('background-color', 'red');
  });

  /* in some cases I need to turn off changeBG function */

  $('.changeBG').removeClass('changeBG');
  // but if you click the div it still turns into red.

});

提前致谢.



1> Josh Crozier..:

您可以将事件处理程序委派给共同的祖先.

在这样做时,它只有在该元素具有该特定类时才起作用,因为在click事件实际被触发时(而不是在附加事件处理程序时)进行检查.

这里的例子

$(document).on('click', '.changeBG', function(){
    $(this).css('background-color', 'red');
});

在上面的例子中,document是共同的祖先.根据您的标记,您可能希望将其更改为最接近的常量祖先元素,以便每次单击时都不会触发事件document.


或者,您也可以使用该.off()方法,并通过利用事件命名空间删除该特定事件处理程序.

您可以附加一个click名为的特定事件click.changeBG:

$('.changeBG').on('click.changeBG', function(){
    $(this).css('background-color', 'red');
});

然后使用.off('click.changeBG')以下命令删除特定事件

这里的例子

$('.changeBG').removeClass('changeBG').off('click.changeBG');


@PraveenKumar:这是委托如何工作的基础:点击到达`document`,然后*那时*jQuery检查它是否通过与委托选择器匹配的元素.因此,当事件发生时,将检查您对元素所做的任何更改(或完全添加新元素).
推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有