2011-12-28 25 views
0

私はjavascriptドロップダウンメニューを持っています。ドロップダウンメニューは正常に機能しますが、ドロップダウンリンクの1つをクリックするとリンクが機能しません。私はそれが私の "偽りの真実を返す"ことと関係があると思う。Return False - リンクが動作しない - ドロップダウン

Javascriptを:私は「falseを返す」ステートメントを削除する場合

function ddMenu_open(event) 
{ 
    ddMenu_close(); 
    var submenu = $(this).find('ul'); 
    if(submenu){ 
     ddmenuitem = submenu.css('visibility', 'visible'); 
     return false; 
    } 
    return true; 
} 

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); 

}); 

document.onclick = ddMenu_timer; 
} 
</script> 

は、だから私のリンクは動作しますが、その後ダウンメニュー私のドロップが開いたままにしません。戻り値のfalse文を削除すると、ドロップダウンメニューが実際にすぐに開き、終了します(ユーザーにはアイテムをクリックする時間がほとんどありません)。私はこのコードで変更する必要があるので、ドロップダウンをクリックすると開いたままになり、ドロップダウンアイテム/リンクの1つがクリックされるとリンクが実際に動作します。

もう一度、今すぐドロップダウン機能がうまくいきます(クリックすると別のクリックがあるまで開いていますが)。ドロップダウンアイテムをクリックすると、リンクが機能せず、新しいページが読み込まれません。ご協力ありがとうございました。

回答をいただきありがとうございますが、依然として私にとっては効果がありません。ここに私の全体のコードは次のとおりです。

再び
<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); 


}); 

document.onclick = function(ev){ 
    if(ev.target.nodeName !== 'ul') { 
     ddMenu_close(); 
    } 
}; 


} 
</script> 

私は、文書が、メニュー自体をクリックしたときに除いクリックしたときmenuesドロップダウンを閉じたいです。ありがとう。あなたはddMenu_openに引数を宣言する必要はありません、あなたは「ドン:

function ddMenu_open(event) 
{ 
    ddMenu_close(e); 
    var submenu = $(this).find('ul'); 
    if(submenu){ 
     ddmenuitem = submenu.css('visibility', 'visible'); 
     return false; 
     e.preventDefault(); 
    } 
    return true; 
} 

:代わりに、あなたはこのようなプルダウンメニューのデフォルトの動作を阻止しようとすることができますfalseを返すの

+5

あなたのコードのjsfiddleを設定すると便利です。 – Jasper

+0

あなたがクリックするたびに 'document.onclick = ddMenu_timer;'のように見えます。 – Mathletics

+0

'varサブメニュー= $(これ).find( 'ul');もしif(submenu.length){} 'でなければなりません。 jQueryは(要素がない場合でも)常にオブジェクトを返します。 'if([])'と 'if($())'が両方とも真です。 –

答えて

0

ddMenu_openの最後にtrueを返す必要があります。しかし、どこから来ているのか分かります。この本は途中であなたをスピードアップさせます:http://eloquentjavascript.net/

+0

私は、関数の定義は: 'e.preventDefault'を使っているなら' function ddMenu_open(e) 'であるべきだと思います。 – Rob

+0

私は上記を試して、私のリンクはまだ動作していません。 – user982853

+0

上記のコードを参照してください – user982853

関連する問題