Выполнение пользовательского действия при вызове данного метода mocked void

Я не понимаю точно, что ваш код пытается сделать, но вы можете сделать переменные доступными в любом обработчике событий, используя преимущества закрытия функций:

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));

16
задан balteo 13 June 2013 в 14:11
поделиться