jQuery/Javascript,两种单击解决方案,但只有一种有效
我正在使用Javascript创建一个jQuery/Javascript,两种单击解决方案,但只有一种有效,jquery,onclick,click,Jquery,Onclick,Click,我正在使用Javascript创建一个.item元素,然后我想通过单击将其删除。为什么.click()不起作用 $('.item').click(function() { $(this).remove(); }); 工作解决方案(为什么它有效?为什么我们不总是使用它而不是。单击()?): $('.item')返回使用该选择器调用jQuery构造函数时,类为item的所有元素。然后将事件处理程序附加到每个事件处理程序。它的设计并不是为了考虑新元素 事件委派语法将单击处理程序绑定到文档,并
.item
元素,然后我想通过单击将其删除。为什么.click()
不起作用
$('.item').click(function() {
$(this).remove();
});
工作解决方案(为什么它有效?为什么我们不总是使用它而不是。单击()
?):
$('.item')
返回使用该选择器调用jQuery构造函数时,类为item
的所有元素。然后将事件处理程序附加到每个事件处理程序。它的设计并不是为了考虑新元素
事件委派语法将单击处理程序绑定到文档
,并处理所有单击事件。如果事件的目标是与选择器匹配的元素(.item
),则接受事件
也请参见此问题:$('.item')
返回在使用该选择器调用jQuery构造函数时,所有元素都具有一个item
类。然后将事件处理程序附加到每个事件处理程序。它的设计并不是为了考虑新元素
事件委派语法将单击处理程序绑定到文档
,并处理所有单击事件。如果事件的目标是与选择器匹配的元素(.item
),则接受事件
也可以查看此问题:原因可能是
。动态添加了item
元素
当您使用$('.item').click(..)
时,它仅将click处理程序绑定到此时dom中存在的元素,因此如果在执行此语句后添加元素,则click处理程序将不会附加到新元素
当您使用
$(document).on('click','.item',function(){})时
要注册click事件处理程序,它将使用事件传播来工作。在dom事件结构中,来自元素的事件将冒泡到文档对象。id如果单击元素,则会触发附加到该元素的单击处理程序及其父元素,除非阻止事件传播。因此,在这个方法中,click-eveht处理程序被注册到document
对象,因此当元素中的click事件冒泡到document对象时,它会测试事件源元素(或其父元素)在这种情况下,通过过滤器.item
,然后执行处理程序,原因可能是。动态添加item
元素
当您使用$('.item').click(..)
时,它仅将click处理程序绑定到此时dom中存在的元素,因此如果在执行此语句后添加元素,则click处理程序将不会附加到新元素
当您使用
$(document).on('click','.item',function(){})时
要注册click事件处理程序,它将使用事件传播来工作。在dom事件结构中,来自元素的事件将冒泡到文档对象。id如果单击元素,则会触发附加到该元素的单击处理程序及其父元素,除非阻止事件传播。因此,在这个方法中,click-eveht处理程序被注册到document
对象,因此当元素中的click事件冒泡到document对象时,它会测试事件源元素(或其父元素)在本例中,使用传递的筛选器.item
,如果为真,则执行处理程序,因为元素是在页面加载后动态创建的
另一个解决方案
$('body').delegate('.item','click',function() {
$(this).remove();
});
因为元素是在页面加载后动态创建的 另一个解决方案
$('body').delegate('.item','click',function() {
$(this).remove();
});
jQuery版本是什么?有JS错误吗?您应该添加一个包含更多上下文的JSFIDLE
click()
一直对我有效,所以你可能会做一些不寻常的事情。我还建议使用比document
更接近的父级,除非带有item
类的元素一直存在到body
;您确实想要在任何时候都不会被替换的最接近的父元素。@VisionarySoftwareSolutions..您从未遇到过这样的事件吗?那么你一定没有尝试过任何冒险的东西。它的事件绑定到动态创建的元素。我只是在使用记事本和firefox。没有错误。什么是jQuery版本?有JS错误吗?您应该添加一个包含更多上下文的JSFIDLEclick()
一直对我有效,所以你可能会做一些不寻常的事情。我还建议使用比document
更接近的父级,除非带有item
类的元素一直存在到body
;您确实想要在任何时候都不会被替换的最接近的父元素。@VisionarySoftwareSolutions..您从未遇到过这样的事件吗?那么你一定没有尝试过任何冒险的东西。它的事件绑定到动态创建的元素。我只是在使用记事本和firefox。没有错误。这与OP已经给出的工作解决方案基本相同。从jQuery 1.7开始,.delegate()
已被.on()
方法取代。注意:是的,我知道。这就是我提到的另一个解决方案的原因@Blender@Blender…谢谢你给我的信息我想live()
已折旧。委托
仍然存在这与OP已经给出的工作解决方案基本相同。从jQuery 1.7开始,.delegate()
已被.on()取代
method.:是的,我知道..这就是我提到另一种解决方案的原因@Blender@Blender…谢谢你提供的信息我以为live()
被贬低了。delegate
还在那里。谢谢你的回答。事件委派似乎比灵活得多。单击()
。为什么我们要使用。click()
?请阅读我答案底部的链接。谢谢你的回答。事件委派似乎比灵活得多。单击()
。我们为什么使用