Chrome和Firefox错误报告之间的差异

时间:2015-06-27 10:46:17

标签: javascript jquery

我有以下代码:

<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 个答案:

答案 0 :(得分:4)

原因是Chrome和IE都有一个全局event对象。这意味着您的代码基本上使用的是window.event而不是缺少的参数。

因此,从Chrome的角度来看,代码实际上并没有错误。它按预期使用全局event

在某些浏览器中定义了其他全局变量而不是其他浏览器。这些不是错误,因为允许主机环境创建自己的主机对象。

答案 1 :(得分:1)

对我来说似乎很简单 - 这只是Chrome和Firefox之间的区别。如果没有事件正在运行,Chrome知道将事件设置为undefined,但是当用户进行交互时,将其设置为我认为的Event。 Firefox不会执行此操作,因此当您尝试在preventDefault上运行event时,它不能,因为它无法在undefined上运行函数。

解决此问题的一种简单方法是向您的函数添加一个名为event的参数,因为Event对象将传递给由$().on或{{1}创建的任何函数}。