Я пытаюсь добавить событие делегата на веб-сайт, и у меня не получается функция, которая соответствует сигнатуре обратного вызова традиционного слушателя (function( event ) {}
), и для получения текущего элемента прослушивания мне нужно передать другой параметр в функцию.
Вот чего мне удалось добиться:
const delegate = function( element, events, target, callback ) {
events.split( " " ).forEach( event => element.addEventListener( event, function( e ) {
let initiator;
if ( e.target && ( initiator = e.target.closest( target ) ) ) {
callback( e, initiator );
}
} ) );
};
let count = 0;
delegate( document, "click", ".js-test-delegate", function( event, elem ) {
elem.innerHTML = `you click on this container ${++count} time(s)`;
} );
const div = document.createElement("div")
div.classList.add( "js-test-delegate" );
document.querySelector( ".container" ) .appendChild( div );
.container{
width: 300px;
height: 300px;
background: rgba(256,0,0,.2);
}
.js-test-delegate{
width: 100px;
height: 100px;
position: relative;
top: 100px;
left: 100px;
background: rgba(0,256,0,.2);
}
<div class="container"></div>
Есть ли способ передать этот элемент elem
в событие, чтобы он заменил свойство currentTarget
для упрощения поведения?
Я пытаюсь изменить Event
, но свойства типа currentTarget
доступны только для чтения или клонирования event = new Event( "click", e)
, но target
и currentTarget
не установлены в данный момент.
И из Конечно это должно быть ванильным js.
Спасибо!