2

为什么要检查事件是否未定义...?

function onMouseMove(e) {

        if (typeof e === 'undefined' || typeof e.pageX === 'undefined') {
            return;
        }
4

5 回答 5

3

该检查源于不同的浏览器以自己的方式调用事件。有些浏览器不传入e,它被定义为event每次调用 mouseHandler 时必须访问的全局对象。

例如,以下代码将始终为您提供事件对象,而不管浏览器如何:

e = e || window.event

有关更多详细信息,请查看由以下人员找到的文章raina77ow

http://www.quirksmode.org/js/events_access.html

于 2012-10-22T17:20:55.353 回答
2
if (typeof e === 'undefined' || typeof e.pageX === 'undefined')

它检查偶数处理程序是否不足或不返回任何其他内容..因为这是 ie 问题。

于 2012-10-28T06:36:25.743 回答
2

如果您传递事件对象 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");
    }        
}​
于 2012-10-22T17:18:34.193 回答
0

检查输入通常是一种很好的做法,尤其是在 JavaScript 这样的松散类型语言中。在这种情况下,我们要确保预期的输入都已定义,如果已定义,我们需要确保它是具有属性的对象pageX。仅检查该条件的第一个子句是不够的,因为它可能会丢失,并且如果完全未定义pageX,仅检查第二个子句会引发错误。e

于 2012-10-22T17:22:59.853 回答
0

我唯一能想到的就是检查函数是被浏览器中的真实事件调用,还是被其他 JS 代码调用。

例如,这将在触发事件时执行,并传入一个事件对象。

$('#someID').on('mousemove', onMouseMove);

但是,这根本不会传递任何参数

onMouseMove();

为什么你需要检查你的代码虽然有点奇怪。您通常不会直接调用事件处理程序。所以有点奇怪。

于 2012-10-22T17:21:33.553 回答