0

さて、私はリンクのリストを持っています、私はそれらをforループで処理し、イベントを添付しています。リンクは、関数を呼び出すクリックイベントを取得します。関数は、それを呼び出したオブジェクトを操作する必要があります。そのようです:

  <ul><li id = 'myId'>Text</li>
    <li id = 'myId'>Text</li>
    <li id = 'myId'>Text</li>
    <li id = 'myId'>Text</li>
    </ul>


   var grab = document.getElementsByTagName('li');
   for (var x =0;x<grab.length;x++){
       grab[x].attachEvent('onmouseover',doSomething);
       }

    function doSomething(){
        this.setAttribute('color','yellow');
    }

これはすべてのブラウザで正常に機能しましたが、IEの場合、IEは、イベントを呼び出したオブジェクトではなく、「これ」をウィンドウにしたいと考えているようです。

JQueryはこの問題を非常に簡単に解決しますが、このコンテキストではJQueryにアクセスできないというだけです。通常のJavaScript内で、「this」を正しく使用してIEを取得する方法、または他のみんなが持っている行動?

ありがとう、

4

3 に答える 3

1

古い標準の信頼できるon[event]ハンドラーを使用するだけです。

for (var x = 0, len = grab.length; x < len; x++) { 
   grab[x].onmouseover = doSomething;
}

また、質問に示されているように、実際にIDを複製していないことを確認してください。

于 2012-05-08T22:56:53.673 に答える
1

イベントは関数に渡されると思います。使用できるはずですevt.srcElement

for (var x =0;x<grab.length;x++){
       grab[x].attachEvent('onmouseover', doSomething);
 }

 function doSomething(evt){
     evt.srcElement.setAttribute('color','yellow');
 }
于 2012-05-08T23:01:41.383 に答える
0

これを行うこともできます:

<ul><li id = 'myId'>Text</li>
<li id = 'myId'>Text</li>
<li id = 'myId'>Text</li>
<li id = 'myId'>Text</li>
</ul>

var grab = document.getElementsByTagName('li');
for (var x =0;x<grab.length;x++){
    grab[x].attachEvent('onmouseover',function(){
        doSomething.call(grab[x]);
    });
}
function doSomething(){
    this.setAttribute('color','yellow');
}
于 2012-05-08T23:32:53.760 に答える