Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE事件,这个_Javascript_Events_This_Compatibility_Explorer - Fatal编程技术网

Javascript IE事件,这个

Javascript IE事件,这个,javascript,events,this,compatibility,explorer,Javascript,Events,This,Compatibility,Explorer,好的,我有链接列表,我用for循环处理它们,附加事件。 链接获得一个调用函数的单击事件。函数需要对调用它的对象进行操作。像这样: <ul><li id = 'myId'>Text</li> <li id = 'myId'>Text</li> <li id = 'myId'>Text</li> <li id = 'myId'>Text</li> </

好的,我有链接列表,我用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');
    }
  • 文本
  • 文本
  • 文本
  • 文本
var grab=document.getElementsByTagName('li');
对于(var x=0;x只需在[event]
处理程序上使用旧的标准reliable

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

并确保您没有像问题中所示复制ID。

我认为事件已传递给函数,您应该能够使用
evt.srceelement

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

 function doSomething(evt){
     evt.srcElement.setAttribute('color','yellow');
 }
对于(var x=0;x您也可以这样做:

<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');
}
  • 文本
  • 文本
  • 文本
  • 文本
var grab=document.getElementsByTagName('li');
对于(var x=0;xy),您需要让
doSomething
返回一个函数。编辑:您的更新也不会起作用,因为您回到了
这个
不是对接收事件的元素的引用的原始问题。返回到您的第一个答案,但在
doSomething
中,让它
返回函数(){sender.setAttribute('color','yellow');}
所以你返回的函数关闭了
发送方
。不确定IE中是否存在闭包泄漏,但它可以解决当前的问题。好吧,我确实有点傻,作为参数传递的“this”给了我一个“object”事件,我认为这仍然不是我想要的,它给出了一个“undefined”的id?@user173361 I think您可以使用
evt.srceelement
来替代
这个
。请看更新希望我不是在挑你的毛病,但这只适用于IE,或者Chrome,因为它们模拟了一些IE的东西,但不适用于其他浏览器。此外,它相当于
evt.target
,这与
这个
不同>如果单击了嵌套元素。谢谢,它们是Dummy id,我想使用这种类型的事件注册,但我还想注册onmouseleave事件(或IE称之为的任何事件)使用这种类型的事件处理程序时可能吗?@user173361:是的,您可以为任何类型的受支持事件绑定一个处理程序,尽管您应该使用
onmouseout
来补充
onmouseover
。这不起作用,因为JavaScript没有块作用域。每个处理程序都引用相同的
x
变量,因此每个处理程序将引用循环后设置的
x
的最终值。您需要一个闭包来保留每个迭代值。