在替换的 HTML DOM 上添加事件侦听器
Adding event listener on a replaced HTML DOM
我正在使用工具提示 jquery 插件以更好的方式显示标题。在我的站点中有一个 link 和两个 classes .fav tooltip
<div class="actsave">
<a href="#" class="fav tooltip" title="Save">Save</a>
</div>
.tooltip
用于取上面的锚标题,根据tooltipster插件显示。
$('.tooltip').tooltipster();
这很好用,但是当用户单击此 link 时,整个 DOM 将被替换为新的 DOM。
$("div.actsave").on("click", "a.fav", function(e){
e.preventDefault();
$(this).replaceWith('<a href="#" class="del tooltip" title="Delete">Delete</a>');
});
此时 .del
class 的新锚没有发生任何事件。
我的问题是如何向 jquery 中新建的 dom 添加事件监听器?
在做了一些研究之后,我以这种方式修复它:
$("div.actsave").on("mouseover mouseout", "a.del", function(e){
$(e.target).tooltipster();
});
但是当我们将鼠标悬停在 link 上时,似乎我们无缘无故地一次又一次地向 dom 添加相同的事件,所以问题是我们可以为此添加一个事件侦听器吗新创建的 dom 就一次?
创建一个标记以使用 data()
进行跟踪
$("div.actsave").on("mouseover mouseout", "a.del", function (e) {
if (!$(this).data('triggered')) {
$(e.target).tooltipster();
$(e.target).data('triggered', true);
}
});
$("div.actsave").on("click", "a.fav", function(e){
e.preventDefault();
var newElement = $('<a href="#" class="del tooltip" title="Delete">Delete</a>');
$(this).replaceWith(newElement);
newElement.tooltipster();
});
我正在使用工具提示 jquery 插件以更好的方式显示标题。在我的站点中有一个 link 和两个 classes .fav tooltip
<div class="actsave">
<a href="#" class="fav tooltip" title="Save">Save</a>
</div>
.tooltip
用于取上面的锚标题,根据tooltipster插件显示。
$('.tooltip').tooltipster();
这很好用,但是当用户单击此 link 时,整个 DOM 将被替换为新的 DOM。
$("div.actsave").on("click", "a.fav", function(e){
e.preventDefault();
$(this).replaceWith('<a href="#" class="del tooltip" title="Delete">Delete</a>');
});
此时 .del
class 的新锚没有发生任何事件。
我的问题是如何向 jquery 中新建的 dom 添加事件监听器?
在做了一些研究之后,我以这种方式修复它:
$("div.actsave").on("mouseover mouseout", "a.del", function(e){
$(e.target).tooltipster();
});
但是当我们将鼠标悬停在 link 上时,似乎我们无缘无故地一次又一次地向 dom 添加相同的事件,所以问题是我们可以为此添加一个事件侦听器吗新创建的 dom 就一次?
创建一个标记以使用 data()
进行跟踪$("div.actsave").on("mouseover mouseout", "a.del", function (e) {
if (!$(this).data('triggered')) {
$(e.target).tooltipster();
$(e.target).data('triggered', true);
}
});
$("div.actsave").on("click", "a.fav", function(e){
e.preventDefault();
var newElement = $('<a href="#" class="del tooltip" title="Delete">Delete</a>');
$(this).replaceWith(newElement);
newElement.tooltipster();
});