关于传递给在点击事件中调用的函数的参数,我对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打开它,结果是:
在任何其他浏览器中,结果为:
正如您所看到的,只有Firefox 4将MouseEvent传递给该函数。这种行为打破了我的很多代码。
你知道任何解决方案吗?谢谢你的帮助。
EDIT1 :Chrome的行为与FF4相似
答案 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? :)