jQuery事件处理程序和未声明的事件对象

时间:2017-02-15 21:30:34

标签: javascript

我遇到了调试某人代码的奇怪情况。下面的代码是对此问题的演示。

我的印象是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>

2 个答案:

答案 0 :(得分:1)

在某些浏览器中,事件实际上是全局定义的window.event,它只引用最后一个事件。在其他情况下,需要明确传递。您可以始终将其作为我认为的第一个参数传递(我知道我很久以前就碰到了这个并且认为这是我使用过的解决方案。)

如果你想要非常安全,你可以随时传递它,然后在函数内部event = event || window.event

答案 1 :(得分:1)

这似乎是这个问题的重复:ReferenceError: event is not defined error in Firefox

基本上Chrome,IE和Safari都有事件的全球符号,Firefox没有。作为最佳做法,您应始终提供参数eventewhatever来规范浏览器之间的行为