0

我是网络编程的初学者,不幸的是我已经遇到了问题。我想使用原型的鼠标悬停(mouseout)功能来添加或删除一个类,但由于某种原因,警报(用于调试)在页面的第一次加载时出现。我知道这一定很荒谬,但我看不出问题所在。我希望只有当我使用“菜单”类检查对象时才会发出警报。

这是我的代码:

window.onload = function(){
    var menuitems = $$('.menu');
    for(var i = 0;i < menuitems.length;i++){
        menuitems[i].observe("mouseover",alert("over"));
        menuitems[i].observe("mouseout",alert("out"));
    }
}

PS。我在 google 和 stackoverflow 上进行了搜索,但找不到类似的问题。如我错了请纠正我。

4

1 回答 1

4

observe方法的第二个参数应该是一个函数- 通过实际调用alert()那里,您只是在定义事件处理程序时(即当页面加载时)发出警报,而不是在触发它时。

尝试这个:

window.onload = function() {
    var menuitems = $$('.menu');
    for(var i = 0; i < menuitems.length; i++) {
        menuitems[i].observe("mouseover", function() {
            alert("over");
        });
        menuitems[i].observe("mouseout", function() {
            alert("out");
        });
    }
};

我在那里定义了事件处理函数,但没有调用它们。当 mouseover/mouseout 事件被触发时,它们将被调用。或者,您可以提前定义函数:

window.onload = function() {
    var handleMouseover = function() {
        alert("over");
    };
    var handleMouseover = function() {
        alert("out");
    };

    var menuitems = $$('.menu');
    for(var i = 0; i < menuitems.length; i++) {
        menuitems[i].observe("mouseover", handleMouseover);
        menuitems[i].observe("mouseout", handleMouseout);
    }
};
于 2012-05-25T19:14:17.793 回答