mootools和IE:addEvents不工作?

时间:2012-01-05 05:34:17

标签: internet-explorer mootools explorer

我的活动在所有事情上都很棒!@#$ IE。我发现我需要调用fireEvent('event');函数,但我不知道在哪里放它。从我之前提出的一个问题中提取出来,这就是我说的地方吗?

$('field').addEvents ({
  'focus' : function() {
    this.fireEvent('focus');
    // do some stuff 
  }
  'blur' : function() {
    this.fireEvent('blur');
    // do other stuff 
  }}
});

因为如果是......其他的东西是错的,因为我试过了它并不值得一个修补匠该死的。

我们可以直接告诉人们“访问被拒绝。你使用的是一个迟钝的浏览器。得到一个真实的,然后回来。”?为什么不能匿名瞄准IE开发团队? :P

反正。 TIA。

WR!

1 个答案:

答案 0 :(得分:2)

你在这里所拥有的是多余的,实际上会导致无限循环。它本质上是一个自我调用的功能。现代JIT compilers可能会去,' oups,你可能不是故意这样做的。并打破循环,但IE7 / 8可能只是按照书面运行它。

基本上,addEvent添加的回调与本机事件触发后的回调之间存在差异,并且手动触发回调(fireEvent)。

稍后 - 如果你做$("field").fireEvent("focus") - 它将只运行绑定函数中的代码。它实际上并没有专注于这个领域。原生$("field").focus();将同时执行。

使用fireEvent时的一个警告是当你的回调尝试对事件本身做事时。例如,在此代码中:

el.addEvent("click", function(e) {
    e.stop();

    // do something
});

// later...

el.fireEvent("click"); // exception as e is not defined and stop is not a function

要解决此问题,您需要检查参数e是否已定义以及是否在回调中定义了stop:

el.addEvent("click", function(e) {
    e && e.stop && e.stop();

    // do something
});

或者你可以将一个虚拟对象传递给fireEvent:

el.fireEvent("click", { 
    stop: Function.from
});

甚至......

el.fireEvent("click", new DOMEvent()); // 1.4+, new Event() before.... 

不确定这是否有帮助,因为你的“问题”中有很多过剩的问题。但它可能会让您了解事件的使用方式。

玩得开心