永发信息网

请问我的代码哪里有问题?关于onmous方法

答案:2  悬赏:60  手机版
解决时间 2021-11-13 06:57
请问我的代码哪里有问题?关于onmous方法
最佳答案
collTopANodes[x].onmouseover = function(){
collTopANodes[x].className = navTopAOverClass;
}();
把最后那个括号删掉
collTopANodes[x].onmouseover = function(){
collTopANodes[x].className = navTopAOverClass;
};追问删掉之后这个事件就完全不执行了。。。追答你不是要鼠标移上去之后才执行这个么?
collTopANodes[x].onmouseover = function(){
this.className = navTopAOverClass;
};追问改成这样以后不但鼠标移上去不执行,一开始也不执行了,我在这个匿名函数中加了alert测试,没反应的。追答开始执行了,是因为你把这个函数后面加了() js会把它当做一个方法来执行。
你看看你的这个函数是不是在window.onload的时候调的,我测试过是好的。



    
    1
    
    
    2
    
追问原来是这样,明白了,但是还是实现不了,我没用window.onload,是放在body的最后执行的,现在鼠标移上去还是改变不了。。。匿名函数似乎没有执行,我没财富值了,没法追问了。。。能私聊吗?谢谢你
全部回答

当 onmouseover 被调用时 for 已经循环结束,你代码中并没有匿名函数,() 只是自动执行


把 for 循环改为下面这样


for (var x = 0; x < collTopANodes.length; x++) {
    (function(a) { // 开始匿名函数,a 为 x 的参考
        collTopANodes[a].onmouseover = function(){
            this.className = navTopAOverClass;
    })(x); // 将 x 传入匿名函数
}追问还是不行,而且我在这个函数后加了alert测试,for循环是执行的追答这种使用匿名方式调用事件的写法肯定是没错的,你应该是其它地方出现错误,有 console 的话最好在测试页面前打开

你可以测试下面的代码,用 onclick 代替的 onmouseover




</head>

aaa</div>
bbb</div>
ccc</div>