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 希望“this”成为窗口,而不是调用事件的对象。

我知道 JQuery 很容易解决这个问题,只是我无法在这种情况下访问 JQuery。有没有办法,就在常规的 javascript 中,正确使用“this”,或者一种近似的方法其他人都有的行为?

谢谢,

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 回答