我今天偶然发现了一个奇怪的行为。基本上,我有一个绑定到kickout.js click事件的函数。该函数正在使用敲除事件,但未明确将其用作参数。
this.myClickHandler = function(){
console.log(event); //event gets logged in Chrome/IE11, not Firefox
}
在我看来,这很奇怪,但是在Chrome中,它按预期运行。它也可以在IE11中正常工作。但是,在Firefox中,它无法运行。我明确指出,它可以在所有浏览器中使用。这是我期望它完全起作用所需要的。
this.myClickHandler = function(model, event){ //event is second parameter passed from knockout click event
console.log(event); //event gets logged in all browsers
}
我玩了一下,并用jQuery进行了复制
function func(){
alert(event);
}
function runFunc(callback){
callback();
}
$(document).ready(function(){
runFunc(func);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
那么这是如何工作的呢?为什么在某些浏览器中可以访问名为“事件”的变量,但在其他浏览器中却不能访问?这是预期的行为吗?
最佳答案
这是旧版本IE带来的东西,在该版本中,事件对象未传递到处理程序方法,而是在全局上下文中设置的。
为了向后兼容,IE仍支持此模型,而chrome也添加了对此功能的支持。但是FF不支持它。
Event object references