* 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 onolay, 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 stopPropagationbaşka bir yerde etkinlik yapıyorsanız , bu çalışmayabilir. Ayrıca, closestiş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 matchesiçin işlevini Etkinlik hedefindeki DOM öğeleri, ancak bu, etkinliklerin hedeflerini yalnızca doğrudan sınıfla sınırlandırdı. Bunun closestyerine, işlevi kullanmak üzere güncellendi ve istenen sınıftaki çocuklar üzerindeki olayların da olayları tetiklemesine izin verildi. Orijinal matcheskod orijinal kemanda bulunabilir:
https://jsfiddle.net/u6oje7af/23/