jQuery/Javascript,两种单击解决方案,但只有一种有效

jQuery/Javascript,两种单击解决方案,但只有一种有效,jquery,onclick,click,Jquery,Onclick,Click,我正在使用Javascript创建一个.item元素,然后我想通过单击将其删除。为什么.click()不起作用 $('.item').click(function() { $(this).remove(); }); 工作解决方案(为什么它有效?为什么我们不总是使用它而不是。单击()?): $('.item')返回使用该选择器调用jQuery构造函数时,类为item的所有元素。然后将事件处理程序附加到每个事件处理程序。它的设计并不是为了考虑新元素 事件委派语法将单击处理程序绑定到文档,并

我正在使用Javascript创建一个
.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错误吗?您应该添加一个包含更多上下文的JSFIDLE
click()
一直对我有效,所以你可能会做一些不寻常的事情。我还建议使用比
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()
?请阅读我答案底部的链接。谢谢你的回答。事件委派似乎比
灵活得多。单击()
。我们为什么使用