JavaScript-js 使用事件委托时,如何才能不触发多余的事件。

发布于 2017-02-24 05:07:25 字数 1582 浏览 1281 评论 0

js 使用事件委托时,如何才能不触发多余的事件。

如下代码:

<ul id="j-comment">
<li>
<div> 代码快 </div>
<div> 代码快 </div>
<a href="javascript:;">回复</a>
</li>
<li>
<div> 代码快 </div>
<div> 代码快 </div>
<a href="javascript:;">回复</a>
</li>
......
</ul>

js代码如下:

function fnAddEvent(obj, sevent, fn) {
if (obj.addEventListener) {
obj.addEventListener(sevent, fn, false);
}
else {
obj.attachEvent("on" + sevent, fn);
}
}

function eventClick(e) {
var ev = e || window.event;
var target = ev.target || ev.srcElement;

while (target.nodeName.toLowerCase() !== "li") {
target = target.parentNode;
}

if (target.nodeName.toLowerCase() === "li") {
alert(target.nodeName);
}
console.log(target.nodeName.toLowerCase());
}

var ul = document.getElementById("j-comment");

fnAddEvent(ul, "click", eventClick);

通过 ul 绑定 click 事件委托,绑定后 li 下的所有标签都会触发 click 事件。

怎么只在 a 标签上触发 click 事件,不在其他元素(div,li等)上触发 click 事件。

$('#j-comment').on('click',"a.j-price-btn",function(){
//do something
});
这样可以解决问题,但是谁能告诉我下原理?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文