我做了一个小问题demonstrate我的问题.
$(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.
});
提前致谢.
最佳答案
你可以delegate the event handler到一个共同的祖先.
原文链接:https://www.f2er.com/jquery/427752.html在这样做时,它只有在该元素具有该特定类时才起作用,因为在实际触发click事件时(而不是在附加事件处理程序时)进行检查.
$(document).on('click','.changeBG',function(){
$(this).css('background-color','red');
});
在上面的例子中,文档是共同的祖先.根据您的标记,您可能希望将其更改为最接近的常量祖先元素,以便每次单击文档时都不会触发该事件.
或者,您也可以使用.off()方法,并使用event namespaces删除该特定事件处理程序.
您可以附加名为click.changeBG的特定点击事件:
$('.changeBG').on('click.changeBG','red');
});
然后使用.off(‘click.changeBG’)删除该特定事件:
$('.changeBG').removeClass('changeBG').off('click.changeBG');