1

まず、タイトルについてお詫び申し上げますが、適切なタイトルが思いつきませんでした。

以下のコード内のhide()関数がトリガーされたときにfirebugで誤って返される理由がわかりません。この欠陥を解決すると、コードの残りの部分が正常に機能することを確信しています。ヘルプ/提案をいただければ幸いです。 。

Firebug Consoleエラー:

hide is not defined
it-services() it-services (line 396)
time = setTimeout("hide()",3000); 

私がこれまでに持っているコード:

        var time;

        $("#form").mouseenter(function() {
            clearTimeout(time);
            $(this).delay(800).animate({
                right: 0
            }, 2000);
        }).mouseleave(function() {
            function hide() {
                $(this).delay(800).animate({
                    right: "-325px"
                }, 1000);
            }
            time = setTimeout(hide,3000);
        });

よろしくお願いします。

ダン。

4

2 に答える 2

1

新しいコードには 2 つの問題があります

  1. hide 関数内では、$(this) のコンテキストは、mouseout 関数内で呼び出されたときと同じではありません。
  2. 次に、非表示関数は、mouseout 関数内の無名関数として定義されます。

マウスオーバーイベント処理関数の外で宣言された関数であれば、より理にかなっていると思います。そうすれば、setTimeOut および mouseout イベント ハンドラからグローバルに参照できます。以下のコードを試してください。これで問題が解決するか、少なくとも一歩前進すると思います。

var time;
var $form;

$("#form").mouseenter(function() {
    $form = $(this);
    clearTimeout(time);
    $(this).delay(800).animate({
        right: 0
    }, 2000);
}).mouseleave(function() {
    hide();
    time = setTimeout(hide,1000);
});
function hide() {
    $form.delay(800).animate({
        right: "-325px"
    }, 3000);
}
于 2011-10-28T12:35:55.363 に答える
1

hide()を使用して呼び出した後、関数を宣言していますsetTimeout。宣言をsetTimeout呼び出しの前に置くだけです。

また、最初の引数としてコードの文字列を渡すと、edsetTimeoutが取得されます。悪です。関数オブジェクトを渡すだけです:evaleval

function hide() {
    $(this).delay(800).animate({
        right: "-325px"
    }, 1000);
}
time = setTimeout(hide, 3000);
于 2011-10-28T11:34:36.347 に答える