6

変数が正しく設定されていない JavaScript コードの問題をデバッグしていました。少し調査した結果、存在しないイベント プロパティから値を取得していたため、変数が設定されていないことがわかりました。この場合、値は event.currentTarget から取得されていましたが、奇妙なことに null でした。

だから私は今少し当惑しています。その event.currentTarget は常に、イベントを発生させたリスナーを保持する要素を常に指していました。では、どのような状況で event.currentTarget が実際に null になるのでしょうか?

4

1 に答える 1

5

さて、私はついにこれを理解しました。

問題は、イベントの処理方法にありました。以下に示すように、イベントオブジェクト自体は、それぞれのハンドラー関数によって処理されるだけではありません。また、ハンドラーで行われたAJAX呼び出しが正常に返された場合にのみ呼び出される別の関数によって処理される予定でした。ただし、成功関数がAJAX呼び出しで実行されると、イベントオブジェクトはそのコンテキストの一部、つまりcurrentTargetプロパティを失います。これは、ブラウザーがsuccess関数内でコードの実行を開始すると、ハンドラーのスコープ内に直接いないためだと思います。

$('#element').click(function(e) {

    // bunch of lines of code here

    $.ajax({
       type: 'POST',
       url: // url,
       ...,
       success: function(response) {

           // more lines of code here

           callAnotherFunction(e);
           // When we invoke the above function, we pass the event in as a 
           // parameter, but the event has already lost some of its context
           // due to scope change.
       }
    });

})
于 2013-01-18T17:52:54.500 に答える