0

ウィンドウを表示およびクリアする 2 つの関数があります。もともと、jquery hover コマンドを使用してインラインで定義していましたが$('item').hover(function() {...}, function() {...});、これは完全に機能します。ただし、これらの関数呼び出しからコードを取得し、それらを分離して のように呼び出すと$('item').hover(function1, function2);、結果は異なります。前者の場合、期待される動作が得られます。つまり、ホバーすると要素が表示され、マウスがホバーされた要素から離れたままになると、タイムアウト後にフェードアウトします。2 番目のバージョンでは、新しい要素が表示され、タイムアウト後にフェードアウトし、ホバー時に戻ってきません。

私が使用しているタイムアウトと関係があると思いますが、元の関数を正確にコピーしたので、理論的には同じことが起こっているはずです..またはそう単純に仮定します. それか、どこかでタイプミスをしましたが、それはわかりません。

完全なコードと html を含む Fiddles は、こちら(動作中のバージョン) とこちら(壊れたバージョン) で利用できます。

動作するコードは次のとおりです。

$('#test').hide();
var timeout;

$('a').hover(function(){
    $('#test').show();
    clearTimeout(timeout);
}, function(){
    timeout = setTimeout(function(){
        $('#test').fadeOut('fast', function(){});
    }, 1000);
});

そして、失敗したのは次のとおりです。

$('#test').hide();
var timeout;

function clearWindow() {
    timeout = setTimeout(function(){
        $('#test').fadeOut('fast', function(){});
    }, 1000);
}

function showWindow() {
    $('#test').show();
    clearTimeout(timeout);
}

$('a').hover(showWindow(), clearWindow());
4

2 に答える 2

3

関数を に渡すときにかっこを削除します.hover()

$('a').hover(showWindow, clearWindow);

かっこは関数を呼び出します。これは、関数自体ではなく、/を呼び出して返された値を渡すことを意味します。showWindow()clearWindow()

于 2013-07-05T05:11:31.203 に答える
3

関数を渡すつもりだったときに関数を呼び出しています。

$('a').hover(showWindow(), clearWindow());
                       ^^             ^^

代わりにこれを使用します (関数がundefined返す ( ) 値ではなく、関数自体を渡したい):

$('a').hover(showWindow, clearWindow);

一般に、別の関数に移動されたコードは異なる動作をする可能性があることに注意してください。これ、異なるコンテキスト変数のセットを参照する可能性があるためです (つまり、元のスコープとは異なるスコープにある)。ただし、これはここにある関数には適用されません。

于 2013-07-05T05:12:11.080 に答える