2014-12-04 227 views
0

我试图选择一个基于它的类的元素(使用$(“。class”)),我有一个问题,我不知道为什么会发生。JQuery类选择器不工作

首先,元素是图像。它通过执行一个函数时创建:

$("#container").append("<img class='removeIcon' src='images/remove.png' remove='"+$(this).val()+"' />"); 

这是可行的。当功能被触发时,图像被添加,甚至多次。而每个人的价值就是它的意义,这一切都很好。元素很好。

什么是不工作...

$(".removeIcon").click(function() { 
    alert(); 
    console.log("Clicked!"); 
}); 

我不知道,如果它不工作,因为图像后来加入,或者也许我做错了什么?但是,每当我点击该类中的任何图像时,都没有提示对话框,也没有控制台日志。我已经键入,到控制台,$(“。removeIcon”); - 它显示了这个类的所有图像,所以我不明白什么是错的。即使在类选择器上,您是否还能点击?

提前致谢!

+0

使用jQuery的()方法 – 2014-12-04 04:09:16

回答

7

您的代码仅适用于现有的.removeIcon元素。

如果您添加动态元素,尽量使用.on

$("#container").on('click', '.removeIcon', function() { 
    alert(); 
    console.log("Clicked!"); 
}); 

其上的所有.removeIcon元素结合内部#container (包括动态添加的元素)click事件

+0

捕获由DOM或者通过的onclick功能单击事件那么几个解释会更好,所以加上它。当你添加动态元素时,他们不会“重新触发”文档的onload调用,因此通常会像你不执行一样调用。这是'on'有用的地方。 – 2014-12-04 03:58:51

+0

我还会提及[Event Delegation](http://learn.jquery.com/events/event-delegation/),不仅仅是'.on',因为它涉及动态创建的元素。 – ekad 2014-12-04 04:00:12

+0

工作完美,谢谢!我会在几分钟内接受SO的答案。 – 2014-12-04 04:06:27

2

是的,问题是,它是稍后添加,因此您必须使用以下代码:

$("#container").on('click', '.removeIcon', function() { 
    alert(); 
    console.log("Clicked!"); 
}); 

因此,该事件将被命名为货柜,但将采取行动.removeIcon项目。

欲了解更多信息,请查看jQuery的on function

1

click()函数不适用于动态加载的数据。 你有

通过DOM

$("#container").on('click', '.removeIcon', function() { console.log("click"); });

OR的onclick功能

$("#container").append("<img class='removeIcon' onclick="somefunctionInJS()" src='images/remove.png' remove='"+$(this).val()+"' />");