我写了一个小脚本来加载带有ajax的页面。应选择具有ajax-pls
- 类的所有链接。
在我添加eventlistener之后,我删除了类,因为我需要每次解析包含的html ......对吗?
(function() {
function addEvent(element, evnt, funct){
if (element.attachEvent)
return element.attachEvent('on'+evnt, funct);
else
return element.addEventListener(evnt, funct, false);
}
var link_click = function (e) {
e.preventDefault();
if (this.getAttribute("href") == 'test1.html') {
var content = document.getElementById('content');
content.innerHTML = "<a href='test3.html' class='ajax-pls'>Test3</a>";
register_listeners();
} else {
alert(this);
}
};
function register_listeners() {
var atags = document.querySelectorAll('a.ajax-pls');
for (i = 0; i < atags.length; i++) {
addEvent(atags[i], 'click', link_click);
atags[i].classList.remove("ajax-pls");
}
}
register_listeners();
})();
这只是测试代码。但是,我是否需要使用类来完成这个技巧,或者我可以在每次包含之后调用register_listeners()吗?
答案 0 :(得分:0)
是的,你需要删除类,否则addEvent
会多次为每个链接添加相同的处理程序。
但是你可以通过使用事件冒泡来绕过这个问题。
如果您将处理程序添加到每个链接的最近共同祖先(在最坏的情况下,它将是document.body
)。它将捕获其中每个元素的每个click事件。您需要选中event.target
。