我正在调试一些遭受一点关闭麻烦的Javascript - 但似乎无法将“event”参数传递给函数。 这是问题(简写):
// let's say links.length == 3
for(var i = 0; i < links.length; i++){
links[i].onclick = function(e){
alert(i); //closure! all links alert "3"
// do something with "e"
}
}
这是我的解决方案
//workaround
// define function outside of loop
function outer(e,i){
return function(){
alert(i); //closure! all links alert "3"
// do something with "e"
}
}
for(var i = 0; i < links.length; i++){
links[i].onclick = outer(e,i); //uh oh! e = undefined???
}
在我的解决方法中,我在循环外部定义了一个函数以防止关闭 - 但是我无法将“e”参数传递给它。有人能指出我正确的方向吗?
答案 0 :(得分:4)
在返回的函数中定义它。
function outer(i){
// ------------v-- event object is passed when this function is invoked
return function( e ){
alert(i);
}
}
for(var i = 0; i < links.length; i++){
links[i].onclick = outer(i);
}
当事件发生时,event
对象被传递 ,因此需要将其定义为最终被指定为处理程序的函数的参数(您返回的函数)来自outer()
)。