1

私は何か簡単なことをしようとしています.JSを介してロードされている画像がたくさんあります. イベント リスナーを load イベントにアタッチし、Image が読み込まれた後、リスナー関数で呼び出し元の Image を取得し、そこからプロパティを取得したいと考えています。これが私のコードです。

function loadImages() {
   for (var i = 0; i < arrDownloadQueueBasic.length; i++) {
                var path = arrDownloadQueueBasic[i].path;

                var img = new Image();
                img.type = arrDownloadQueueBasic[i].type;
                img.attachEvent(img, 'load', setBasicElement);
                img.src = path;
            }
   }

function setBasicElement(e) {
        var caller = e.target || e.srcElement;
        alert(caller); // THIS DOESNT WORK - RETURN NULL
        alert(caller.type) // OF COURSE THIS DOESNT WORK AS WELL...
    }
4

2 に答える 2

0

これを試して:

var caller = window.event ? window.event.srcElement : e.target;

私の記憶が正しければ、 を使用した場合、IE はイベント オブジェクトをパラメーターとして渡しませんattachEvent()が、グローバルeventオブジェクトを持っています。

于 2012-07-17T14:54:18.500 に答える
0

修正する必要があることがいくつかあります。まず、IE 以外のブラウザーでは attachEvent メソッドを使用しないでください。メソッドが実装されているかどうかを確認し、それに応じて次のように動作するようにコードを構成する必要があります。

if(img.addEventListener) {
    img.addEventListener('load', setBasicElement, false);
}
else if(img.attachEvent) {
    img.attachEvent('onload', setBasicElement);
}
else {
    img.onload = setBasicElement;
}

もう 1 つの問題は、attachEvent を使用するときにイベント名の前に「on」を付ける必要があることです。

編集

setBasicElement 関数で次のコードを使用して、呼び出し元を取得できます。

var caller = e.target || e.srcElement || window.event.target || window.event.srcElement;

これが実際の例です - http://jsfiddle.net/BMsXR/3/

于 2012-07-17T14:43:22.890 に答える