Böyle bir şeye sahip olabileceğiniz yetki verilmiş olay işleyicileri durumunda:
<ul>
<li data-id="1">
<span>Item 1</span>
</li>
<li data-id="2">
<span>Item 2</span>
</li>
<li data-id="3">
<span>Item 3</span>
</li>
<li data-id="4">
<span>Item 4</span>
</li>
<li data-id="5">
<span>Item 5</span>
</li>
</ul>
ve JS kodunuz şöyle:
$(document).ready(function() {
$('ul').on('click li', function(event) {
var $target = $(event.target),
itemId = $target.data('id');
//do something with itemId
});
});
undefined
LI içeriğinin a'ya sarıldığı için itemId'in büyük olasılıkla daha fazla olduğunu görürsünüz, <span>
bu <span>
da muhtemelen etkinlik hedefi olacaktır. Bunun gibi küçük bir çekle dolaşabilirsiniz:
$(document).ready(function() {
$('ul').on('click li', function(event) {
var $target = $(event.target).is('li') ? $(event.target) : $(event.target).closest('li'),
itemId = $target.data('id');
//do something with itemId
});
});
Veya, okunabilirliği en üst düzeye çıkarmayı (ve ayrıca jQuery sarma çağrılarının gereksiz tekrarını önlemek) tercih ediyorsanız:
$(document).ready(function() {
$('ul').on('click li', function(event) {
var $target = $(event.target),
itemId;
$target = $target.is('li') ? $target : $target.closest('li');
itemId = $target.data('id');
//do something with itemId
});
});
Etkinlik yetkilendirmesi kullanılırken .is()
, etkinlik hedefinizin (diğer şeylerin yanı sıra) aslında olması gereken şey olduğunu doğrulamak için yöntem paha biçilmezdir. .closest(selector)
DOM ağacını aramak için kullanın ve aşağı doğru aramak için .find(selector)
(genellikle .first()
olduğu gibi .find(selector).first()
). Sen kullanımına gerek yoktur .first()
kullanırken .closest()
yalnızca iken ilk eşleşen atası elemanını döndürür olarak, .find()
getiri tüm eşleşen kökenini.