mow*_*ker 15 javascript events delegation event-handling dom-events
http://jsfiddle.net/walkerneo/QqkkA/
我在这里看到很多问题要么在javascript中询问或回答事件委托,但是我还没有看到如何将事件委托用于不会成为click事件目标的元素.
例如:
HTML:
<ul>
<li><div class="d"></div></li>
<li><div class="d"></div></li>
<li><div class="d"></div></li>
<li><div class="d"></div></li>
<li><div class="d"></div></li>
<li><div class="d"></div></li>
</ul>?
Run Code Online (Sandbox Code Playgroud)
CSS:
ul{
padding:20px;
}
li{
margin-left:30px;
margin-bottom:10px;
border:1px solid black;
}
.d{
padding:10px;
background:gray;
}
?
Run Code Online (Sandbox Code Playgroud)
如果我想在单击时添加单击事件来处理li元素,该怎么办?如果我将一个事件处理程序附加到ul元素,则divs将始终是目标元素.除了在单击函数中检查目标元素的每个父元素之外,我该如何实现?
编辑:
我想使用事件委托而不是:
var lis = document.getElementsByTagName('li');
for(var i=0;i<lis.length;i++){
lis[i].onclick = function(){};
}
Run Code Online (Sandbox Code Playgroud)
但如果我这样做:
document.getElementsByTagName('ul')[0].addEventListener('click',function(e){
// e.target is going to be the div, not the li
if(e.target.tagName=='LI'){
}
},false);
Run Code Online (Sandbox Code Playgroud)
编辑:我对如何使用Javascript库不感兴趣,我对他们如何做以及如何使用纯js感兴趣.
Ric*_*asi 15
这是解决它的一种方法:
var list = document.getElementsByTagName('ul')[0]
list.addEventListener('click', function(e){
var el = e.target
// walk up the tree until we find a LI item
while (el && el.tagName !== 'LI') {
el = el.parentNode
}
console.log('item clicked', el)
}, false)
Run Code Online (Sandbox Code Playgroud)
这被过度简化,循环将继续向上通过UL元素.有关更完整的示例,请参阅黑麦/事件中的实现.
的Element.matches,Node.contains和Node.compareDocumentPosition方法,可以帮助你实现这种类型的特征.
| 归档时间: |
|
| 查看次数: |
8429 次 |
| 最近记录: |