http://jsfiddle.net/walkerneo/QqkkA/클릭 된 요소의 부모를 처리하는 자바 스크립트 이벤트 위임?
나는 여기에 많은 질문을 본 적이 중 하나에 대해 물어이나 자바 스크립트에서 이벤트 위임에 대답하고,하지만 난 아직했습니다 것은 볼 수 있지만, 어떻게 될 수 없습니다 요소에 대한 이벤트 위임을 사용하는 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>
CSS :
ul{
padding:20px;
}
li{
margin-left:30px;
margin-bottom:10px;
border:1px solid black;
}
.d{
padding:10px;
background:gray;
}
내가 그들 클릭하고 때 li
요소를 처리하는 클릭 이벤트를 추가하려면? ul
요소에 이벤트 처리기를 연결하면 div
이 항상 대상 요소가됩니다. 클릭 기능에서 대상 요소의 모든 부모를 확인하는 것 외에는 어떻게해야합니까?
편집 : 내가 대신 이벤트 위임을 사용하려면
:
var lis = document.getElementsByTagName('li');
for(var i=0;i<lis.length;i++){
lis[i].onclick = function(){};
}
하지만 내가 할 경우 :
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);
편집 : 내가 사용하는 방법에 관심이 아니에요 이에 대한 자바 스크립트 라이브러리, 나는 그들이 어떻게 그것을 어떻게 순수 js로 할 수있는 방법에 관심이 있어요.
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)
이 지나치게 단순화, 루프 심지어 UL 요소지나 트리를 계속 :
귀하의 질문에 대해 실제로 혼란스럽고 이해하려는 것이 무엇인지 알고 싶지 않습니다. –
나는 항상 이것을 망쳤습니다 ...이 링크는 도움이 될 수 있습니다 : http://www.quirksmode.org/js/events_order.html –
@Michal, 비효율적 인 것처럼 보였습니다. 그것이 유일한 길인지 궁금합니다. – mowwwalker