¿Cómo pasar argumentos a la función de escucha addEventListener?
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 someVar
no es visible dentro de la función de escucha de addEventListener
, donde probablemente se trata como una nueva variable.
¿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>
JavaScript es un lenguaje orientado a prototipos, ¡recuerda!
No hay absolutamente nada de malo en el código que has escrito. Ambos some_function
y someVar
deberí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 someVar
variable al lado de la llamada a addEventListener
)
var someVar;
someVar = some_other_function();
alert(someVar);
someObj.addEventListener("click", function(){
some_function(someVar);
}, false);
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) .