为什么要检查事件是否未定义...?
function onMouseMove(e) {
if (typeof e === 'undefined' || typeof e.pageX === 'undefined') {
return;
}
为什么要检查事件是否未定义...?
function onMouseMove(e) {
if (typeof e === 'undefined' || typeof e.pageX === 'undefined') {
return;
}
该检查源于不同的浏览器以自己的方式调用事件。有些浏览器不传入e
,它被定义为event
每次调用 mouseHandler 时必须访问的全局对象。
例如,以下代码将始终为您提供事件对象,而不管浏览器如何:
e = e || window.event
有关更多详细信息,请查看由以下人员找到的文章raina77ow
:
if (typeof e === 'undefined' || typeof e.pageX === 'undefined')
它检查偶数处理程序是否不足或不返回任何其他内容..因为这是 ie 问题。
如果您传递事件对象 onMouseMove 则无需检查。但是在这种情况下,可以通过传递参数调用这个函数,需要检查 e。
<div id="div1" onmousemove="onMouseMove(event)" > mouse move test, with event </div>
<div id="div1" onmousemove="onMouseMove()" > mouse move test, without event </div>
function onMouseMove(e) {
if (typeof e === 'undefined' || typeof e.pageX === 'undefined') {
alert("With e");
}
else
{
alert("Without e");
}
}
检查输入通常是一种很好的做法,尤其是在 JavaScript 这样的松散类型语言中。在这种情况下,我们要确保预期的输入都已定义,如果已定义,我们需要确保它是具有属性的对象pageX
。仅检查该条件的第一个子句是不够的,因为它可能会丢失,并且如果完全未定义pageX
,仅检查第二个子句会引发错误。e
我唯一能想到的就是检查函数是被浏览器中的真实事件调用,还是被其他 JS 代码调用。
例如,这将在触发事件时执行,并传入一个事件对象。
$('#someID').on('mousemove', onMouseMove);
但是,这根本不会传递任何参数
onMouseMove();
为什么你需要检查你的代码虽然有点奇怪。您通常不会直接调用事件处理程序。所以有点奇怪。