使用特定类向当前和未来元素添加事件侦听器

时间:2011-12-10 19:24:47

标签: javascript jquery html

使用JQuery,是否可以向当前或将来的任何元素添加事件监听器?具有特定的类?

我正在开发一个大量使用contentEditable的项目,因此DOM正在发生变化,元素可以通过用户输入添加和删除类。

我希望能够说“类X的元素在点击时应该做Y”,但如果我理解正确,$(“。X”)。click(Y)只会将事件监听器添加到元素中目前有X级。

此外,如果一个元素不再是X类的一部分,那么它仍然会有click事件监听器。

我该怎么做?

3 个答案:

答案 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之后保持动作监听器附加的可能 - 其他人可能有解决方案。