使用JQuery,是否可以向当前或将来的任何元素添加事件监听器?具有特定的类?
我正在开发一个大量使用contentEditable的项目,因此DOM正在发生变化,元素可以通过用户输入添加和删除类。
我希望能够说“类X的元素在点击时应该做Y”,但如果我理解正确,$(“。X”)。click(Y)只会将事件监听器添加到元素中目前有X级。
此外,如果一个元素不再是X类的一部分,那么它仍然会有click事件监听器。
我该怎么做?
答案 0 :(得分:40)
是的。您所谈论的内容称为事件委派。这是一个例子:
$('#container').on('click', '.innerElement', function(){
/// Do stuff
});
在您的情况下,#container
将是一个已知存在于页面加载上的元素,它将包含您关注的子元素(现在或将来)。这种方法利用了DOM中的事件冒泡。
正如另一张海报所提到的,live方法也可以使用 - 但它在jQuery 1.7中已被弃用,并且通常不如使用更多选择性委派(例如上面的示例)那样高效。
答案 1 :(得分:3)
您将要使用事件委派。 jquery 1.7比以前的版本更加抽象,但它看起来像这样:
$("#myWrappingElement").on("click", ".myclass", function(event){
alert($(this).text());
});
这基本上会向#myWrappingElement元素添加一个click事件监听器,jquery将自动查看原始事件目标是什么并激活正确的函数。这意味着您可以添加或删除.myclass元素,但仍会触发事件。
答案 2 :(得分:-2)
jQuery live()方法swill允许有一个“实时”动作监听器 - 所以如果新的DOM元素与选择器匹配,它们将被附加到动作监听器。例如:
$(".X").live("click", function(){
alert('some action');
});
有关详细信息,请参阅此处的文档:http://api.jquery.com/live/
我不确定你的问题的第二部分是关于在删除类os之后保持动作监听器附加的可能 - 其他人可能有解决方案。