我了解您无法将任何参数传递给addEventListener
。你必须这样做
el.addEventListener("click", function(){callSomeFunction("myString");}, false);
但是,让我们以这种方式做到这一点的原因是什么?
答案 0 :(得分:6)
因为如果你这样做了:
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);
答案 1 :(得分:3)
addEventListener
必须将一个函数对象作为其第二个参数,但没有理由为另一个函数无法生成该函数对象。也许你会对产生函数的higher-order function感兴趣:
function generateAlertFunc(alertString) {
return function() {
alert(alertString);
}
}
el.addEventListener("click", generateAlertFunc("myString"), false);
generateAlertFunc
接受参数并使用它们来构建一个传递给addEventListener
的新函数。