JQuery:click函数在removeClass()之后仍然有效
我试图在类上启用事件侦听器,但它不起作用 DOM元素:JQuery:click函数在removeClass()之后仍然有效,jquery,Jquery,我试图在类上启用事件侦听器,但它不起作用 DOM元素: <button class="btn btn-warning shopping"> Shop </button> 购物类已被删除,但仍会触发操作 为此,您需要使用事件委派 $('body').on('click', '.shopping', function(e){ 在上面的代码中,我使用了body作为示例,但您必须在其上使用静态最近元素。Cause 首先,为了解释为什么仍然会得到事件的代码响应,您需要了解cli
<button class="btn btn-warning shopping"> Shop </button>
购物类已被删除,但仍会触发操作 为此,您需要使用
事件委派
$('body').on('click', '.shopping', function(e){
在上面的代码中,我使用了body
作为示例,但您必须在其上使用静态最近元素。Cause
首先,为了解释为什么仍然会得到事件的代码响应,您需要了解click()
在代码运行时将事件侦听器附加到元素。当侦听器连接到由$('.shopping')
选择的元素,而不是选择器$('.shopping')
本身时,元素随后如何更改并不重要
解决方案
您真正需要的是创建一个委托事件处理程序。这将在运行代码时,在事件时间应用选择器,而不是
您应该将委派的事件处理程序连接到不更改的祖先元素。您应该选择一个您知道将始终存在的祖先,但是如果没有其他元素更接近所需元素,则文档
是最佳默认值
$(document).on('click', '.shopping', function(e){
这将在事件时应用过滤器时起作用。当类被删除时,单击
函数将不会被调用
笔记:
- 切勿将
用于委托事件,因为它有一个与样式相关的错误(基本上,0计算的body height将阻止鼠标事件冒泡到body
)李>body
- 如果没有其他更接近/方便的方法,请始终使用
作为默认值文档
有一个额外的好处,文档总是存在的,而且事件会在以后发生,因此您不需要将事件注册码放入准备好文档的处理程序中李>document
$(document).on('click', '.shopping', function(e){