通过更改HTML元素上的动态类名来处理事件列表器

Handling event listerners with changing dynamic classname on HTML element?

本文关键字:处理事件 列表 动态 HTML 元素      更新时间:2023-10-05

我有几个动态生成的HTML元素,每个元素都使用自己的动态id作为类名。我将事件侦听器连接到这些元素上,如下所示:

$(document).on("click", ".id_" + dynamic_id , clickCallback);

问题是动态id可以通过ajax成功调用进行更改,并且相应的HTML元素更新如下:

$(".id_" + old_dynamic_id).attr("class", new_dynamic_id);

此更改将使以前附加的事件侦听器丢失,因为它不知道HTML元素现在有一个已分配的新id。

什么是干净的处理方式?我可以在ajax成功函数中重新附加事件侦听器,但这并不理想,因为将有两个地方存在相同的事件侦听器代码:创建元素时和ajax成功函数内。

你可以试试这个:

$(document).on("click", "[class^='id_']", clickCallback);

这似乎有效:

$(".link").on("click", function() {
    alert("yes");
});
$(".link").attr("class", "new-class");

即事件是否直接附加到元素。

http://jsfiddle.net/5ru2W/