http://jsfiddle.net/walkerneo/QqkkA/Javascript olay delegasyonu, tıklanan elemanların ebeveynlerini ele alıyor mu?
Burada çok soru gördüm ya soran veya javascript olay heyeti ile cevap veriyor, ama henüz ettik görmek için, ancak, nasıl olacak değildir elemanları için olay Yetkinin kullanılması click etkinliğinin hedefleri. Örneğin
:
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;
}
Ne tıklandıkları yaparken li
elemanları işlemek için bir tıklama etkinlik eklemek isterseniz? ul
öğesine bir olay işleyicisi eklerseniz, div
s her zaman hedef öğeler olur. Hedef öğenin her ebeveyini bir tıklama işlevinde kontrol etmenin dışında, bunu nasıl başarabilirim?
düzenleme: yerine olay heyeti kullanmak istiyorum
:
var lis = document.getElementsByTagName('li');
for(var i=0;i<lis.length;i++){
lis[i].onclick = function(){};
}
Ama bunu yaparsam:
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);
DÜZENLEME: Ben nasıl kullanılacağını ilgilenmiyorum Bu için Javascript kitaplıkları, nasıl yaptıkları ve saf js ile nasıl yapılabilir ilgileniyorum.
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)
Bu aşırı basitleştirilmiş olduğunu, döngü bile UL elemanı geçmiş ağaca devam edecektir:
Sorunuz hakkında kafa karıştırıcı, neyi başarmak istediğinizi anlamadınız. –
Her zaman bu konuda berbat oluyorum ... bu link yardımcı olabilir: http://www.quirksmode.org/js/events_order.html –
@Michal, Verimsiz görünüyordu, tek yolun bu olup olmadığını merak ediyordum. – mowwwalker