Firefox 4新点击事件行为的问题

时间:2011-06-03 08:59:08

标签: javascript firefox mootools click mouseclick-event

关于传递给在点击事件中调用的函数的参数,我对Firefox 4的行为有疑问。

看一下这个例子:

<html>
<head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/mootools/1.11/mootools.js"></script>
</head>
<body>
    <span id="e">Klick mich!</span> 
    <script type="text/javascript">
        $("e").addEvent("click", function(a, b, c){
            alert(this);
            alert(a);
            alert(b);
            alert(c);
            console.log(this);
            console.log(a);
            console.log(b);
            console.log(c);
        }.bind(1, [2, 3]));
    </script>   
</body>
</html>

如果您使用Firefox 4打开它,结果是:

  1. 1
  2. 2,3
  3. object MouseEvent
  4. 未定义
  5. 在任何其他浏览器中,结果为:

    1. 1
    2. 2
    3. 3
    4. 未定义
    5. 正如您所看到的,只有Firefox 4将MouseEvent传递给该函数。这种行为打破了我的很多代码。

      你知道任何解决方案吗?谢谢你的帮助。

      EDIT1 :Chrome的行为与FF4相似

1 个答案:

答案 0 :(得分:1)

问题是 - 这是mootools 1.11 - 不支持和旧

在mootools 1.11中,它被接受使用(http://docs111.mootools.net/Native/Function.js#Function.bind):

  

绑定可选,该函数的“this”将引用的对象。

     

args可选,传递的参数。必须是一个数组,如果参数&gt; 1

因此,做.bind(1,[args])was是正确的。但是,最近在实现它的浏览器中更改了原生Function.bind实现 - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind

  

thisArg调用绑定函数时,作为this参数传递给目标函数的值。如果使用new运算符构造绑定函数,则忽略该值。

     

arg1,arg2,...在调用目标函数时,前缀为提供给绑定函数的参数的参数。

这意味着,要使其工作,您需要.bind(1,2,3,4);,其中1是绑定范围,2,3,4是参数。

应该升级,在写完4年后浏览器上运行mootools 1.11会产生不可预测的结果。总是。例如,由于用于测试它的弃用函数,1.11将不再检测gecko / ff。

接下来,检查netscape4? :)