2

タイトルが示すように、Javascript イベント ハンドラー内でイベント オブジェクトを取得することが保証されているかどうかに興味があります。私が尋ねている主な理由は、このような onClick イベント ハンドラーを見たことがあるからです。

function(e) {
    if(e && e.target) {
        //Code in here
    }
}

これは私には間違っているように思えますが、Javascript にはブラウザー間でわずかな違いがあることはわかっています。イベントオブジェクトをチェックするのに適切な時間はありますか? それともイベント対象?イベントを発生させるにはターゲットが必要なようです。

4

2 に答える 2

3

いいえ。古いバージョンの Windows では、イベント引数がイベント ハンドラーに渡されません。彼らはそれをグローバル変数に持ってwindow.eventおり、ターゲットは.srcElement. その例外を除いて、常にイベント構造を取得する必要があります。

古いバージョンの IE の回避策は次のとおりです。

function(e) {
    if (!e) {
        e = window.event;
        e.target = e.srcElement;
    }
    // code that uses e here
}

ただし、通常、これは、イベント ハンドラーのインストールに使用する関数によって、より高いレベルで対処されます。例えば:

// add event cross browser
function addEvent(elem, event, fn) {
    if (elem.addEventListener) {
        elem.addEventListener(event, fn, false);
    } else {
        elem.attachEvent("on" + event, function() {
            // set the this pointer same as addEventListener when fn is called
            window.event.target = window.event.srcElement;
            return(fn.call(elem, window.event));   
        });
    }
}
于 2013-03-04T18:01:54.720 に答える
1

彼らが達成しようとしているブラウザーの互換性によっては、これは許容できる解決策かもしれません。ただし、古いバージョンの IE では、eventオブジェクトはグローバルwindowオブジェクトの一部です。その場合、ターゲットを取得するためには、必要window.event.srcElementありませんtarget

eventIEのオブジェクトの詳細については、こちらをご覧ください。

于 2013-03-04T18:05:48.173 に答える