2013-05-16 167 views
2

我知道你不能將任何參數傳遞給addEventListener。你必須這樣做爲什麼你不能直接使用addEventListener傳遞參數?

el.addEventListener("click", function(){callSomeFunction("myString");}, false); 

但是,讓我們這樣做的原因是什麼?

+1

如果你問爲什麼你不能用'setTimeout'或'setInterval'來指定其他參數,這可能是因爲監聽器已經接收到一個'event'參數。如果你指定了你自己的論點,它會如何表現? – canon

+2

您能否提供一個示例,說明如何將事件處理程序與其他參數綁定? –

+0

@FelixKling el.addEventListener(「click」,myFunc(1,2,3),false); – 1252748

回答

5

因爲如果你這樣做:

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

也許OP意味着像'.addEventListener(「click」,callSomeFunction,false,「myString」);'儘管如此。 –

+0

@FelixKling即使有效的JS?我很確定'addEventListener'只需要3個參數,但我可能會誤解 – Doorknob

+0

句法上是。當然,它不起作用,因爲addEventListener不能像這樣工作。但是這就是我理解這個問題的原因:爲什麼你不能爲事件處理函數傳遞'addEventListener'的附加參數。我認爲OP已經澄清了他們的問題。 (我不是說你的答案是錯誤的或者類似的,我自己只需要更清楚些)。 –

2

addEventListener必須採取一個函數對象作爲第二個參數,但沒有理由認爲函數對象不能被生產另一個功能。也許你會感興趣的higher-order function生成功能:

function generateAlertFunc(alertString) { 
    return function() { 
     alert(alertString); 
    } 
} 

el.addEventListener("click", generateAlertFunc("myString"), false); 

generateAlertFunc接受參數,並使用它們來構建其傳遞到addEventListener一個新的功能。

+0

好的。所以我想我錯了。我以爲你不能這樣做。 – 1252748

+0

@thomas當然,您可以 - 關鍵是'addEventListener'需要第二個參數的函數引用。調用'generateAlertFunc'會返回一個**函數**,所以它可以正常工作 – Ian

+0

同上setTimeout? – 1252748

相關問題