Я не понимаю точно, что ваш код пытается сделать, но вы можете сделать переменные доступными в любом обработчике событий, используя преимущества закрытия функций:
function addClickHandler(elem, arg1, arg2) {
elem.addEventListener('click', function(e) {
// in the event handler function here, you can directly refer
// to arg1 and arg2 from the parent function arguments
}, false);
}
В зависимости от вашей точной ситуации кодирования , вы можете почти всегда делать какой-то закрытие, сохраняя доступ к переменным для вас.
Из ваших комментариев, если вы пытаетесь выполнить это:
element.addEventListener('click', func(event, this.elements[i]))
Затем вы можете сделать это с помощью функции самоисполнения (IIFE), которая захватывает аргументы, которые вы хотите в закрытии, когда она выполняется и возвращает фактическую функцию обработчика событий:
element.addEventListener('click', (function(passedInElement) {
return function(e) {func(e, passedInElement); };
}) (this.elements[i]), false);
Подробнее о том, как IIFE работает, см. эти другие ссылки:
Код обертки Javascript внутри анонимной функции
Выражение с мгновенной вызывной функцией (IIFE) В JavaScript - Передача jQuery
Каковы хорошие примеры использования JavaScript для выполнения анонимных функций?
Эта последняя версия, возможно, проще увидеть, что она делает как это:
// return our event handler while capturing an argument in the closure
function handleEvent(passedInElement) {
return function(e) {
func(e, passedInElement);
};
}
element.addEventListener('click', handleEvent(this.elements[i]));
Также можно использовать .bind()
, чтобы добавить аргументы для обратного вызова. Любые аргументы, которые вы передадите .bind()
, будут добавлены к аргументам, которые будут иметь сам обратный вызов. Итак, вы можете сделать это:
elem.addEventListener('click', function(a1, a2, e) {
// inside the event handler, you have access to both your arguments
// and the event object that the event handler passes
}.bind(elem, arg1, arg2));