我再次无法理解javascript。
我有一个可拖动的库,它有一个像这样调用的命令(_ag只是命名空间的东西):
_ag.drag(event,targetDiv);
// targetDiv can be a string, btw - converted to an element in the function
所以我的代码看起来像这样(用一个闭包传递一些数据 - 给我一个新技巧):
header.onmousedown=function(targetDiv){
return function(){
_ag.drag(event,targetDiv)
}
}(aTargetDiv)
效果很好!太棒了!在... IE浏览器! SF!铬!不在FIREFOX!
不,firefox无法找到该事件。现在通常这很容易就像这样(形成略有不同 - 希望它仍然有效):
header.onmousedown=function(event){
alert(event.screenX)
}
但是,如果我决定传入一些参数,它会消除事件,我猜这是FF中某种不可见的参数?
//broken thing 1:
header.onmousedown=function(event){
alert(event.screenX) // somethingToPass in covers event in FF
}(somethingToPassIn)
// broken thing 2:
header.onmousedown=function(event){
alert(event.screenX)
}(event,somethingToPassIn) // event is undefined
SO FIREFOX:我如何向您发送活动?这里希望这是一个非常愚蠢的问题,那些SO人群的答案都有答案!在此先感谢,我会在这里撞到墙上。
答案 0 :(得分:7)
Firefox可能不支持event
,而是在事件触发时将其传递给您的函数。所以,
header.onmousedown=function(targetDiv){
return function(e){
e = e || event; //This will give support for global event and passing the event into the function
_ag.drag(e, targetDiv);
}
}(aTargetDiv)
除非aTargetDiv
变量稍后在代码中更改,否则不需要闭包。相反,你可以这样做:
header.onmousedown=function(e){
e = e || event;
_ag.drag(e, aTargetDiv);
};