2

イベントが未定義かどうかを確認するためにこれを行うのはなぜですか...?

function onMouseMove(e) {

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

5 に答える 5

3

このチェックは、さまざまなブラウザーが独自の方法でイベントを呼び出していることに起因します。一部のブラウザーは渡されず、mouseHandler が呼び出されるたびにアクセスする必要がeあるグローバル オブジェクトとして定義されます。event

たとえば、次のコードは、ブラウザーに関係なく、常にイベント オブジェクトを提供します。

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')

偶数ハンドラーが不十分であるか、それ以外の場合は何も返さないかどうかを確認します..cozこれは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

関数がブラウザの実際のイベントによって呼び出されているか、他のJSコードによって呼び出されているかを確認するために私が考えることができる唯一のこと。

たとえば、これはイベントが発生したときに実行され、イベント オブジェクトを渡します。

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

ただし、これは引数をまったく渡しません

onMouseMove();

ただし、コードでチェックが必要な理由は少し奇妙です。通常、イベント ハンドラーを直接呼び出すことはありません。だから少し奇妙です。

于 2012-10-22T17:21:33.553 に答える
0

入力をチェックすることは、特に JavaScript のような緩やかに型付けされた言語では、一般的に良い習慣です。この場合、期待される入力が両方とも定義されていることを確認する必要があり、定義されている場合は、プロパティを持つオブジェクトであることを確認する必要がありますpageX。その条件の最初の句をチェックするだけでは不十分です。これは、欠落している可能性があり、完全に定義されていないpageX場合に2番目の句をチェックするだけでエラーがスローされるためです。e

于 2012-10-22T17:22:59.853 に答える