【问题标题】:pass an event AND a variable to an anon function in firefox将事件和变量传递给Firefox中的匿名函数
【发布时间】:2011-07-14 23:05:12
【问题描述】:

由于无法理解 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)

效果很好!太棒了!在...即!顺丰!铬合金!不在 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:我如何向您发送事件?希望这是一个非常愚蠢的问题,并且有这么多的人有答案!提前谢谢,我会在这里撞墙。

【问题讨论】:

  • 找不到event,因为您没有将其指定为参数。在 W3C 兼容的浏览器中,event 对象是传递给事件处理程序的第一个参数。 IE 只通过window.event 提供了另一种方式。 Chrome 两者兼而有之。我建议你阅读excellent articles about event handling at quirksmode.org

标签: javascript events firefox closures


【解决方案1】:

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

【讨论】:

  • 天哪!有用!另外:事物在各处动态应用,因此“aTargetDiv”可能会根据上下文而有所不同。 (艺术学校——这类事情的背景很好)谢谢!
猜你喜欢
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
相关资源
最近更新 更多