* Bu, hedef sınıftaki çocukların olayları tetiklemesine izin vermek için düzenlendi. Ayrıntılar için cevabın alt kısmına bakınız. *
Öğelerin sık sık eklendiği ve kaldırıldığı bir sınıfa olay dinleyicisi eklemek için alternatif bir yanıt. Bu on
olay, olayın dinlediği bir alt öğe için seçiciyi iletebileceğiniz jQuery işlevinden esinlenmiştir .
var base = document.querySelector('#base'); // the container for the variable content
var selector = '.card'; // any css selector for children
base.addEventListener('click', function(event) {
// find the closest parent of the event target that
// matches the selector
var closest = event.target.closest(selector);
if (closest && base.contains(closest)) {
// handle class event
}
});
Keman: https://jsfiddle.net/u6oje7af/94/
Bu, base
öğenin alt öğelerine yapılan tıklamaları dinler ve bir tıklamanın hedefinde seçiciyle eşleşen bir üst öğe varsa, sınıf etkinliği işlenir. Tek tek öğelere daha fazla tıklama dinleyicisi eklemek zorunda kalmadan öğeleri istediğiniz gibi ekleyebilir ve kaldırabilirsiniz. Bu, bu dinleyici eklendikten sonra eklenen öğeler için bile, jQuery işlevselliği gibi (kaputun altında biraz benzer olduğunu düşünüyorum) hepsini yakalayacaktır.
Bu, ilerleyen olaylara bağlıdır, bu nedenle stopPropagation
başka bir yerde etkinlik yapıyorsanız , bu çalışmayabilir. Ayrıca, closest
işlevin görünüşte IE ile bazı uyumluluk sorunları var (ne değil?).
Bu tür bir eylemi tekrar tekrar dinlemeniz gerekiyorsa, bu bir işlev haline getirilebilir.
function addChildEventListener(base, eventName, selector, handler) {
base.addEventListener(eventName, function(event) {
var closest = event.target.closest(selector);
if (closest && base.contains(closest)) {
// passes the event to the handler and sets `this`
// in the handler as the closest parent matching the
// selector from the target element of the event
handler.call(closest, event);
}
});
}
=========================================
DÜZENLEME: Bu yayın ilk kullanılan matches
için işlevini Etkinlik hedefindeki DOM öğeleri, ancak bu, etkinliklerin hedeflerini yalnızca doğrudan sınıfla sınırlandırdı. Bunun closest
yerine, işlevi kullanmak üzere güncellendi ve istenen sınıftaki çocuklar üzerindeki olayların da olayları tetiklemesine izin verildi. Orijinal matches
kod orijinal kemanda bulunabilir:
https://jsfiddle.net/u6oje7af/23/