为什么只有第一个节点对象会变,这是怎么回事???

function navTopMouseOver(navDivId, navTopAClass, navTopAOverClass){
var collTopANodes = document.getElementById(navDivId).getElementsByTagName("a");
for (var x = 0; x < collTopANodes.length; x++) {
collTopANodes[x].onmouseover = function(){
collTopANodes[x].className = navTopAOverClass;
}();
}
}
我想实现在节点对象上鼠标进入就改变class,但是这段代码在网页一加载,我还没有让鼠标经过,它的class就变了,而且不循环,只有第一个节点对象会变,这是怎么回事?

神不在的星期二
浏览 83回答 2
2回答

蝴蝶不菲

collTopANodes[x].onmouseover = function(){collTopANodes[x].className = navTopAOverClass;}();把最后那个括号删掉collTopANodes[x].onmouseover = function(){collTopANodes[x].className = navTopAOverClass;};

繁星点点滴滴

当 onmouseover 被调用时 for 已经循环结束,你代码中并没有匿名函数,() 只是自动执行把 for 循环改为下面这样for&nbsp;(var&nbsp;x = 0; x < collTopANodes.length; x++) {&nbsp;&nbsp;&nbsp;&nbsp;(function(a) {&nbsp;// 开始匿名函数,a 为 x 的参考&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collTopANodes[a].onmouseover =&nbsp;function(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.className = navTopAOverClass;&nbsp;&nbsp;&nbsp;&nbsp;})(x);&nbsp;// 将 x 传入匿名函数}
打开App,查看更多内容
随时随地看视频慕课网APP