我遇到了调试某人代码的奇怪情况。下面的代码是对此问题的演示。
我的印象是event
在进入事件处理程序时应该是undefined
。就像在Firefox中一样,但Chrome和IE11 event
不是undefined
,而是包含事件对象。我的猜测是关闭在某种程度上有效,但在Firefox中则不行。
它应该以哪种方式工作?不一致的责任在哪里(jQuery?Firefox?Chrome / IE11?)?
$('button').on('click',function(){
var color = '#'+(Math.random()*0xFFFFFF<<0).toString(16);
$(event.target).css({backgroundColor:color});
$('body').css({backgroundColor:color});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button type="button">Click me!</button>
答案 0 :(得分:1)
在某些浏览器中,事件实际上是全局定义的window.event
,它只引用最后一个事件。在其他情况下,需要明确传递。您可以始终将其作为我认为的第一个参数传递(我知道我很久以前就碰到了这个并且认为这是我使用过的解决方案。)
如果你想要非常安全,你可以随时传递它,然后在函数内部event = event || window.event
。
答案 1 :(得分:1)
这似乎是这个问题的重复:ReferenceError: event is not defined error in Firefox
基本上Chrome,IE和Safari都有事件的全球符号,Firefox没有。作为最佳做法,您应始终提供参数event
或e
或whatever
来规范浏览器之间的行为