我知道你不能將任何參數傳遞給addEventListener
。你必須這樣做爲什麼你不能直接使用addEventListener傳遞參數?
el.addEventListener("click", function(){callSomeFunction("myString");}, false);
但是,讓我們這樣做的原因是什麼?
我知道你不能將任何參數傳遞給addEventListener
。你必須這樣做爲什麼你不能直接使用addEventListener傳遞參數?
el.addEventListener("click", function(){callSomeFunction("myString");}, false);
但是,讓我們這樣做的原因是什麼?
因爲如果你這樣做:
el.addEventListener("click", callSomeFunction("myString"), false);
它會立即執行callSomeFunction
,然後將其值返回addEventListener
,然後使用。
舉例來說,如果我有這樣的:
function callSomeFunction() {
doSomeThings();
return 10;
}
然後el.addEventListener("click", callSomeFunction("myString"), false);
真要給el.addEventListener("click", 10, false);
。
如果你有一個不帶參數的函數,你可以直接通過它:
el.addEventListener("click", callSomeFunction, false);
也許OP意味着像'.addEventListener(「click」,callSomeFunction,false,「myString」);'儘管如此。 –
@FelixKling即使有效的JS?我很確定'addEventListener'只需要3個參數,但我可能會誤解 – Doorknob
句法上是。當然,它不起作用,因爲addEventListener不能像這樣工作。但是這就是我理解這個問題的原因:爲什麼你不能爲事件處理函數傳遞'addEventListener'的附加參數。我認爲OP已經澄清了他們的問題。 (我不是說你的答案是錯誤的或者類似的,我自己只需要更清楚些)。 –
addEventListener
必須採取一個函數對象作爲第二個參數,但沒有理由認爲函數對象不能被生產另一個功能。也許你會感興趣的higher-order function生成功能:
function generateAlertFunc(alertString) {
return function() {
alert(alertString);
}
}
el.addEventListener("click", generateAlertFunc("myString"), false);
generateAlertFunc
接受參數,並使用它們來構建其傳遞到addEventListener
一個新的功能。
如果你問爲什麼你不能用'setTimeout'或'setInterval'來指定其他參數,這可能是因爲監聽器已經接收到一個'event'參數。如果你指定了你自己的論點,它會如何表現? – canon
您能否提供一個示例,說明如何將事件處理程序與其他參數綁定? –
@FelixKling el.addEventListener(「click」,myFunc(1,2,3),false); – 1252748