0

私は Web プログラミングの初心者ですが、残念ながら既に問題を抱えています。プロトタイプのマウスオーバー (マウスアウト) 関数を使用してクラスを追加または削除したいのですが、何らかの理由で (デバッグ用の) アラートがページの最初のロード時に表示されます。これを尋ねるのはばかげているに違いないことはわかっていますが、問題がわかりません。クラス「メニュー」を持つオブジェクトに移動したときにのみアラートが表示されるようにします。

これは私のコードです:

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メソッドの 2 番目の引数は関数である必要があります。実際に呼び出すと、イベント ハンドラーがトリガーされたときではなく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 に答える