2011-10-20 76 views
0

マウスオーバーオーバーエフェクトに遅延を付けるには、setTimeoutがオプションの1つです。しかし、私が試してみると、関数は呼び出されません。setTimeout関数が呼び出されていませんか?

HTML:

<li><a href="#" 
     onmouseover="mopendelay('menu_proj')" 
    <li> 

はJavaScript:

// open hidden layer 
function mopen(id) 
{ 
    // cancel close timer 
    mcancelclosetime(); 

    // close old layer 
    if(ddmenuitem) ddmenuitem.style.visibility = 'hidden'; 

    // get new layer and show it 
    ddmenuitem = document.getElementById(id); 
    ddmenuitem.style.visibility = 'visible'; 

} 

// delay menu open on mouseover 
function mopendelay(id) 
{ 
    var delay = setTimeout(function(){ 
     alert('delay'); // isn't called 
     mopen(id); 
    }, 200); 
    clearTimeout(delay); 
} 

答えて

4

タイムアウト機能を実行する前に、タイムアウトをクリアしています。

function mopendelay(id) 
{ 
    var delay = setTimeout(function(){ 
     mopen(id); 
    }, 200); 
} 
+0

OKです。すべての答えをありがとう。私はクリアタイムアウトを削除する場合は動作します。私はまた、適切な応答を得るためにデバッグアラート文を削除する必要があります。 – user823527

2

すぐsetTimeoutによって返されたハンドルのclearTimeoutを呼んでいます。何故ですか?私はあなたがそれを削除する場合、コードが期待どおりに動作すると思います。

0

あなたはclearTimeoutの直後に電話しています。何のために?その行を削除すると、正しく動作します。

+0

すべての答えをありがとう。 – user823527

0

クリアタイムアウトは、setTimeoutに渡される関数の外にある必要があります。

関連する問題