¿Cómo pasar argumentos a la función de escucha addEventListener?

Resuelto Abhishek Yadav asked hace 16 años • 36 respuestas

La situación es algo así como-

var someVar = some_other_function();
someObj.addEventListener("click", function(){
    some_function(someVar);
}, false);

El problema es que el valor de someVarno es visible dentro de la función de escucha de addEventListener, donde probablemente se trata como una nueva variable.

Abhishek Yadav avatar Nov 02 '08 17:11 Abhishek Yadav
Aceptado

¿Por qué no simplemente obtener los argumentos del atributo objetivo del evento?

Ejemplo:

const someInput = document.querySelector('button');
someInput.addEventListener('click', myFunc, false);
someInput.myParam = 'This is my parameter';
function myFunc(evt)
{
  window.alert(evt.currentTarget.myParam);
}
<button class="input">Show parameter</button>
Expandir fragmento

JavaScript es un lenguaje orientado a prototipos, ¡recuerda!

Zaloz avatar Aug 16 '2012 12:08 Zaloz

No hay absolutamente nada de malo en el código que has escrito. Ambos some_functiony someVardeberían ser accesibles, en caso de que estuvieran disponibles en el contexto en el que los anónimos

function() { some_function(someVar); } 

fue creado.

Verifique si la alerta le brinda el valor que ha estado buscando, asegúrese de que sea accesible en el alcance de la función anónima (a menos que tenga más código que opere en la misma someVarvariable al lado de la llamada a addEventListener)

var someVar; 
someVar = some_other_function();
alert(someVar);
someObj.addEventListener("click", function(){
    some_function(someVar);
}, false);
Sergey Ilinsky avatar Nov 02 '2008 10:11 Sergey Ilinsky

Esta pregunta es antigua, pero pensé en ofrecer una alternativa usando ES5 .bind(), para la posteridad. :)

function some_func(otherFunc, ev) {
    // magic happens
}
someObj.addEventListener("click", some_func.bind(null, some_other_func), false);

Solo tenga en cuenta que necesita configurar su función de escucha con el primer parámetro como argumento que está pasando al enlace (su otra función) y el segundo parámetro ahora es el evento (en lugar del primero, como hubiera sido) .

Brian Moore avatar May 16 '2013 19:05 Brian Moore