<ul class="buy-list">
<li class="item">
<div class="sour-price">
<div class="source">京东商城</div>
<div class="price">¥1140</div>
</div>
<div class="desc-buylink">
<div class="desc">京东商城</div>
<div class="buylink">购买</div>
</div>
</li>
...
...
</ul>
上面的结构,ul下面有很多li,现在我把事件委托到ul上,
代码:
var buyList = document.querySelector('.buy-list');
buyList.onclick = function(e){
var target = e.target;
// 只有点击li才触发事件
if(target.className.indexOf('item') !== -1){
// do something
}
}
我想实现的效果是:点击li或li内部的任意一个元素,都会执行事件。
但是上面的写法只有当我点击li时才会执行do something,点击的是sour-price 或 price元素,都不会执行do something...
请问如何实现我想要的效果?
PS:当然,判断 target.parentNode
或 target.parentNode.parentNode
看看是不是li也是可以的,但老觉得这么写不优雅。假设li里的结构更加复杂的话,这样写就不行了,总不能N个parentNode,一直往上找吧?
首先要用
addEventListener
而不用onclick
,onclick
只能绑定一个事件,前者可以绑定多个。明确的回答你用jQuery,其中有相应的用法,.on()
搞清楚了 DOM 事件处理流程,其实永原生 JS 解决问题也不难。
via:dom-event-architecture
你没说清楚点击后执行什么样的事件?子元素的事件是会冒泡到父元素的,你在父元素上添加事件处理即可。