将事件和变量传递给firefox中的anon函数

时间:2011-07-14 23:05:12

标签: javascript events firefox closures

我再次无法理解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人群的答案都有答案!在此先感谢,我会在这里撞到墙上。

1 个答案:

答案 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);
};