2016-06-13 2 views
-1
function myFunc(parameter1) { 
    //function definition 
} 
document.getElementById("some Id").addEventListener("click", myFunc(myparameter)); 

Почему я не могу передать параметр функции myFunc() внутри eventListener? Я знаю, что могу использовать этот путь -Почему мы не можем передавать параметр в функции слушателя eventListener?

document.getElementById("some Id").addEventListener("click", function() { 
    myFunc(myparameter); 
}); 

Но почему я не могу сделать это напрямую?

PS- Я хочу знать, должны ли соблюдаться правила, предписанные W3C, напрямую (и я не должен задавать этот вопрос), или есть причина, лежащая в основе каждого правила?

+5

Поскольку 'MyFunc (myparameter)' прямо сейчас исполняет 'myFunc', не тогда, когда событие запускается. – deceze

+0

О, так что нет никакой функции, которая позволяет мне напрямую передавать аргумент, но вызывать функцию при возникновении события? –

+0

[IIFE (выражение с выражением немедленного вызова)] (https://developer.mozilla.org/en-US/docs/Glossary/IIFE) – melancia

ответ

2

myFunc(myparameter) выполняет функцию прямо сейчас, не тогда, когда вызывается событие. Вы хотите передать функцию, которая выполняет myFunc и передает параметр при вызове, то есть при срабатывании события. Самый прямой способ сделать это заключается в следующем:

.addEventListener('click', function() { myFunc(myparameter); }) 

, возможно, менее очевидный способ Function.prototype.bind:

.addEventListener('click', myFunc.bind(null, myparameter)) 
1

У вас возникли проблемы с кодом. myFunc(myparameter) выполняет правильный путь. Вы должны вызвать пользовательскую функцию, используя этот путь:

document.getElementById("some Id").addEventListener("click", function() { 
    myFunc(myparameter); 
}); 
Смежные вопросы