2012-04-05 10 views
1

Ich verwende den folgenden Code, um ein Navigationsmenü beim Klicken auf einen Anker anzuzeigen/auszublenden.Gibt es eine bessere Möglichkeit, ein Menü auszublenden, wenn ein Benutzer darauf klickt?

Das Problem, das ich habe, ist, dass beim ersten Laden der Seite muss ich zweimal auf den Anker klicken, um das Menü anzuzeigen. Danach kann ich das Menü mit einem einzigen Klick umschalten. Ich kann auch irgendwo im Dokument auf das Menü klicken, um es auszublenden.

Hat jemand ein Problem mit dem unten stehenden Code oder weiß von einem besseren Weg für mich, das Menü zu verbergen, wenn ein Benutzer aus dem Menü klickt?

$('#aToggleQuickNavigation').click(function() { 
    $('#ulQuickNavigation').toggle(); 
}); 

$('html').click(function() { 
    if ($('#ulQuickNavigation').css('display') == 'block') { 
     $('#ulQuickNavigation').css('display', 'none'); 
    } 
    $('#aToggleQuickNavigation').click(function (event) { 
     event.stopPropagation(); 
    }); 
    $('#ulQuickNavigation li a').click(function (event) { 
     event.stopPropagation(); 
    }); 
}); 
+0

Allgemeinen Menüs Arbeit bei mouse-over, wenn sie keinen zusätzlichen Anschluss der Seite abdecken, klicken Sie nicht. Auf diese Weise schloss die Maus sie, nicht klicken. Sie sollten die Benutzererfahrung hier überdenken. –

+0

Sie verlassen niemanden, der mit der Tastatur navigiert. Ich würde wirklich empfehlen, mit einer eingebrannten Lösung wie Superfish zu gehen. – steveax

+0

können Sie den HTML-Code angeben? Ich denke, Sie shold verwenden Sie Hover nicht klicken –

Antwort

1

ausgeblendet es, wenn das Click-Ereignis bis zum Körper des ganzen Weges Blasen:

$("body").click(function(){ 
    $("#ulQuickNavigation").hide(); 
}); 

Wenn der Benutzer eines beliebigen Stelle auf dem Menü klickt, Sie verhindert bereits die Ausbreitung von diesem Klick, so dass die Der Körper wird niemals davon hören, und als solches wird es nicht verborgen bleiben.

Eine andere Sache, die ich bemerkte, ist, dass Sie Ihre Click-Ereignisse innerhalb der Click-Ereignishandler des HTML-Elements binden. Das kann ziemlich problematisch sein. Jedes Mal, wenn ein Klick zum HTML-Element aufsteigt, binden Sie mehr und mehr Klickereignisse.

Just-Stick mit so etwas wie dies für jetzt:

// Any click that arrives at the body should close my navigation 
$("body").click(function(){ 
    $("#ulQuickNavigation").hide(); 
}); 

// Prevent clicks on nav from reaching the body 
$("#ulQuickNavigation").click(function(e){ 
    e.stopPropagation(); 
}); 
+0

Vielen Dank Jonathan. Das hat mein Problem gelöst. Seltsamerweise benutze ich hide() in einem anderen Bereich der Seite. Nicht sicher, wie ich es übersehen habe. Ich glaube, ich war zu abgelenkt, um herauszufinden, warum mein Code nicht funktioniert hat. Prost. – user1316222

0

Haben Sie versucht, in slideToggle Funktionalität die jQuery gebaut mit?

Grundsätzlich braucht es ein Element mit display: none; darauf und wird es bei Klick anzeigen (oder wo immer Sie die Änderungslogik einstellen).

Beispiel:

$("#ID").slideToggle(700);

wo 700 ist die Zeit in Millisekunden Sie die Dia Toggle nehmen wollen.

In Ihrem Fall:

$('#aToggleQuickNavigation').click(function() { $('#ulQuickNavigation').slideToggle(500); });

+0

Danke MrShmee. Ich habe sehr spezifische Anforderungen für diese Schnittstelle, so dass slideToggle nicht geeignet wäre. – user1316222

Verwandte Themen