Chrome 和 Firefox 错误报告之间的差异
2015-06-27
371
我有以下代码:
<a href='#' class='link'>Click Me</a>
<script type="text/javascript">
$(".link").on('click', function(){
event.preventDefault();
console.log('This will appear on Chrome, but not in Firefox');
});
</script>
显然代码中有一个错误,因为我在函数参数中没有“event”变量。 令人惊讶的是,Chrome 控制台不会报告任何错误,并将执行 console.log 行。 对于 Firefox,它将抛出以下错误: “ReferenceError:未定义事件” 并将停止代码执行。
为什么 Chrome 浏览器没有报告任何错误?Chrome 是否还有其他异常会忽略明显有缺陷的代码?
jsfiddle: https://jsfiddle.net/ArturoO/L3hym4r2/3/ 提前致谢!
2个回答
原因是 Chrome 和 IE 都有一个全局
event
对象。这意味着您的代码基本上使用的是
window.event
,而不是缺少的参数。
因此,从 Chrome 的角度来看,代码实际上根本没有错误。它按预期使用了全局
event
。
有些浏览器定义了其他全局变量,而其他浏览器没有。这些不是错误,因为允许主机环境创建自己的主机对象。
2015-06-27
对我来说这似乎很简单 - 这只是 Chrome 和 Firefox 之间的区别。如果没有事件正在运行,Chrome 知道将事件设置为
undefined
,但当用户交互时,它将其设置为
Event
,我猜。Firefox 不会这样做,所以当您尝试在
event
上运行
preventDefault
时,它无法运行,因为它无法在
undefined
上运行函数。
解决这个问题的一个简单方法是向您的函数添加一个名为
event
的参数,因为
Event
对象会传递给由
$().on
或
.addEventListener
创建的任何函数。
Nebula
2015-06-27