【发布时间】:2019-05-23 12:42:25
【问题描述】:
我想将参数传递给 Javascript 中的事件侦听器。 我找到了解决方案,但我不明白它们为什么或如何工作以及为什么其他解决方案不起作用。
我有 C/C++ 背景,但是在 Javascript 中函数的执行有很大不同。 您能否帮助我了解以下示例如何以及为什么有效或无效?
没有参数,代码可以正常工作:
var clicker = document.getElementById("mainNavToggle");
clicker.addEventListener("click", eventFunction);
function eventFunction()
{
console.log("works");
}
如果我在 eventListener 中包含方括号,则函数会执行一次而不触发事件,然后什么也不做:
var clicker = document.getElementById("mainNavToggle");
clicker.addEventListener("click", eventFunction());
function eventFunction()
{
console.log("works");
}
我想这是因为该函数是在 eventListener 调用的,这不允许 eventListener 函数稍后调用 eventFunction。
当我想用 eventFunction 传递参数时。 以下方法不起作用:
var clicker = document.getElementById("mainNavToggle");
clicker.addEventListener("click", eventFunction("works"));
function eventFunction(myStr)
{
console.log(myStr);
}
它在没有事件触发的情况下调用 eventFunction,然后当事件触发时什么都不做,这与以前的行为相同。 到目前为止,我想我可以理解。
为了在事件函数中正确传递参数,我找到了以下代码。 以下解决方案可以正常工作:
var clicker = document.getElementById("mainNavToggle");
clicker.addEventListener("click", eventFunction("works"));
function eventFunction(myStr)
{
function func(event, myStr)
{
console.log(myStr);
}
return function(event) {
func(event,myStr)
};
}
我注意到的第一件事是这个 eventFunction 没有立即调用。 这是为什么呢?
但是,我不知道如何在每个函数中传递参数。 我知道“作品”文字在 eventFunction 上传递给 myStr。 但是在函数 func 中有一个额外的事件参数不是由 eventFunction 传递的。
还有为什么 eventFunction 需要返回另一个带有一个参数的函数,该参数在内部调用 func 函数?
另外请注意,我要向 eventFunction 传递不具有全局范围的参数,否则不需要传递参数。
【问题讨论】:
-
我倾向于说这个问题是不同的,因为它更多地询问“为什么”,而另一个问题则侧重于“如何”。提问者已经知道如何到达。 @GeorgeJempty
标签: javascript dom-events