Javascript IE事件,这个
好的,我有链接列表,我用for循环处理它们,附加事件。 链接获得一个调用函数的单击事件。函数需要对调用它的对象进行操作。像这样: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> </
<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
的最终值。您需要一个闭包来保留每个迭代值。