开发者问题收集

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