2011-12-29 6 views
0

私はこのドロップダウンメニューのスクリプトを持っています。すべてのクリックがメニュー自体で行われてもうまく動作しますが、メニューをクリックするとドロップダウンが閉じません。ユーザーが実際のメニューではない画面上のどこかをクリックすると、メニューを閉じることができます。私はコードを追加しようとしているdocument.onclick閉じるが、メニューをクリックすると開いたままにする

document.onclick = ddMenu_close; 

しかし、それはそれは、その後のonclick ddMenu_closeを呼び出すため、すぐにそれを閉じて、次に呼び出す関数を使用して「開く」が、されているので、これはメニューが決してオープンになります。私のスクリプトは以下の通りです:

<script type="text/javascript"> 
    function ddMenu() { 
    var timeout = 500; 
    var closetimer = 0; 
    var ddmenuitem = 0; 

    function ddMenu_open(e) 
    { 
     ddMenu_close(); 
     var submenu = $(this).find('ul'); 
     if(submenu){ 
      ddmenuitem = submenu.css('visibility', 'visible'); 

     } 

    } 

    function ddMenu_close() 
    { if(ddmenuitem) ddmenuitem.css('visibility', 'hidden'); } 

    function ddMenu_timer() 
    { closetimer = window.setTimeout(ddMenu_close, timeout); } 

    function ddMenu_canceltimer() 
    { if(closetimer) 
     { window.clearTimeout(closetimer); 
      closetimer = null;}} 

    $(document).ready(function() 
    { $('#ddMenu > li').bind('click', ddMenu_open); 
     $('#ddMenu li ul').bind('click', ddMenu_timer); 


    }); 


    } 
    </script> 

は、だから私はメニューまたはドロップダウンをクリックすると干渉をducumentまたはウィンドウをクリックしたときにドロップダウンを閉じませんが、このスクリプトに何かを追加する必要があります。何か助けてくれてありがとう。

答えて

1

$(document)バインディングクリックイベントトリガーddMenu_close()のddMenu_open()にあります。 ddMenu_close()では、クリックイベントの$(document)をキャンセルします。

これは一例です:

http://jsfiddle.net/bEPvP/

+0

これは私が探しています何に非常に近いです。私は 'il'への実際のリンクを追加しない限り、正常に動作します。実際の 'a'リンクを 'il'に追加すると、リンクは機能しません。私はこれが偽の返品によるものだと思う。あなたはjsfiddleをチェックして、実際に仕事につながるかどうか確認できますか?今、あなたにはリンクがないul/ilがあります。ありがとうございました。 – user982853

+0

'return false;'を 'e.stopPropagation();'に変更してください。[http://jsfiddle.net/bEPvP/4/](http://jsfiddle.net/bEPvP/4/)Jsfiddleはリンクを使用できませんジャンプするには、例をローカル操作に入れてください –

関連する問題