在JavaScript中静态地将变量传递给函数
有关更简单的解释,请参见相应的 这是我在循环中调用的代码:在JavaScript中静态地将变量传递给函数,javascript,Javascript,有关更简单的解释,请参见相应的 这是我在循环中调用的代码: var eventNames = ["click", "dblclick", "contextmenu"]; for (var i = 0; i < eventNames.length; ++i) { var crtName = eventNames[i]; $("#" + crtName).click(function () { alert("Event " + crtName); });
var eventNames = ["click", "dblclick", "contextmenu"];
for (var i = 0; i < eventNames.length; ++i) {
var crtName = eventNames[i];
$("#" + crtName).click(function () {
alert("Event " + crtName);
});
}
var eventNames=[“单击”、“dblclick”、“上下文菜单”];
对于(变量i=0;i
当然,当调用处理程序时,
crtName
始终是“contextmenu”
,因为此时,for
-循环已经结束,i
始终指向可能的最高值
注意:在当前示例中,我使用jQuery中的单击功能。在我的实际应用程序中,调用另一个框架来注册事件处理程序。所以这只是一个例子,不能改变。我也不能在事件发生时添加传递给处理程序的参数。因此,这不是一个jQuery问题
同样,它与问题“”类似,除了我自己没有调用我的事件处理程序这一重要事实之外
基本上:我希望在注册处理程序时填充变量crtName
,在调用时填充变量而不是。因为您使用crtName
引用元素的ID,所以只需在事件处理程序中引用这个.ID
,您需要使用闭包,如下所示:
(function (crtName) {
$("#" + crtName).click(function () {
alert("Event " + crtName);
});
})(crtName);
通过这种方式,您可以将crtName
传递给一个自调用函数,该函数使用数组中每个成员的正确事件名称执行问题:
JavaScript的作用域是函数级,而不是块级,并创建
闭包只意味着将封闭范围添加到
封闭函数的词汇环境
循环终止后,函数级变量crtName
具有
上下文菜单
,这就是内部函数“看到”的内容
所以你可以
var eventNames = ["click", "dblclick", "contextmenu"];
for (var i = 0; i < eventNames.length; ++i) {
var crtName = eventNames[i];
attach_event(crtName);
};
function attach_event(crtName) {
$("#" + crtName).click(function () {
alert("Event " + crtName);
});
}
var eventNames=[“单击”、“dblclick”、“上下文菜单”];
对于(变量i=0;i
了解有关闭包的更多信息:
谢谢你的留言。正如在示例中所写的,jQuery方法仅用于简化示例代码和创建可运行的JSFIDLE。因此,这不是一个解决方案=(如果您使用变量设置事件类型,也可以考虑使用<代码> EVT.Type 获取事件类型。