Я понятия не имею, как это сделать, я хочу передать аргумент функции обратного вызова "ctrlDeleteItem":
document.querySelector('. container'). addEventListener ('click', ctrlDeleteItem);
Но если я это сделаю, я потеряю доступ к свойству события, например:
document.querySelector('.container').addEventListener('click', ctrlDeleteItem(item));
function ctrlDeleteItem(item, event) {
return function() {
console.log(item);
console.log(event);
}
}
Как я могу передать событие в качестве параметра? Я не могу найти, как это сделать, спасибо.
ctrlDeleteItem
ответ неверен, потому что это приведет к ctrlDeleteItem
функции ctrlDeleteItem
. Это можно показать, добавив инструкцию console.log("test")
в ctrlDeleteItem()
- вы получите сообщение немедленно.
Правильное решение состоит в том, чтобы настроить "обратную" функцию обратного вызова, которая будет принимать событие как обычно, а затем заставить эту оболочку вызвать функцию обратного вызова с любыми аргументами. При необходимости оболочка может передать event
фактическому обратному вызову.
const item = 'foo';
document.querySelector('.container').addEventListener('click', function(evt){
ctrlDeleteItem(evt, item);
});
function ctrlDeleteItem(evt, item) {
console.log(evt.type, item);
console.log(event.target.className);
}
<div class="container">container</div>
Поместите event
в качестве аргумента в возвращаемую функцию в ctrlDeleteItem
, чтобы он правильно использовался как event
в слушателе:
function ctrlDeleteItem(item) {
return function(event) {
console.log(item);
console.log(event);
}
}
const item = 'foo';
document.querySelector('.container').addEventListener('click', ctrlDeleteItem(item));
function ctrlDeleteItem(item) {
return function(event) {
console.log(item);
console.log(event.target.className);
}
}
<div class="container">container</div>
ctrlDeleteItem
немедленно. Если вы по сути хотите передать дополнительный аргумент слушателю во время добавления слушателя, использование функции, возвращающей функцию, является хорошим способом для достижения этой цели.