2012-04-03 2 views
13

Ich habe ein dynamisch angehängtes Menü, das ich entferne, wenn Sie irgendwo auf der Seite klicken, einschließlich der Menüverknüpfungen. Was ich versuche zu erreichen, ist die Entfernung zu verhindern, wenn Sie auf einen bestimmten Link klicken und das funktioniert einfach nicht für mich. Leider kann ich die Delegate-Methode nicht verwenden, wenn das aufgrund der alten Version auf jQuery, die auf der Clientseite verwendet wird, keine Option zum Aktualisieren bietet.

Also könnten Sie vielleicht vorschlagen, ob es einen Weg gibt, dies zu tun. Hier ist ein kurzes Beispiel von mir.

<script> 
      $(function() { 

       $('.menu').append('<a href="" class="solid">Option</a> <a href="">Option</a> <a href="">Option</a>');        

       $('.menu a').live('click',function(){ 
        return false; 
       }); 

       $('a.solid').live('click',function(){ 
        return false; 
       }); 

       $('html').click(function() {      
        $('.menu').remove();     
       });    

      }); 

     </script> 

und der Behälter

<div class="menu"></div> 

Antwort

35

Vielleicht wird es wie funktionieren diese

$('html').click(function(e) {      
    if(!$(e.target).hasClass('solid')) 
    { 
     $('.menu').remove();     
    } 
}); 

siehe: http://jsfiddle.net/fq86U/2/

+0

hehe, das ist perfekt !!!! Funktioniert wie ein Zauber und geradlinig inklusive mit .live ('click', Funktion ... – devjs11

+0

Wenn alle zustimmen Ich denke, es ist eine großartige und einfache Methode, um die Ausnahme zu erkennen? – devjs11

+0

stoppropagation ist eine bessere Methode, aber wenn das in irgendeiner Weise nicht funktioniert, dann wird diese Methode funktionieren. – sneeky

4

Sie dies versucht haben:

$('.menu a').click(function(event){ 
    event.stopPropagation(); 
}); 
+0

Fügen Sie auch Event.preventDefault() vollständig um den Betrieb zu stoppen. –

+0

@wouterh hat das gerade versucht. Funktioniert nicht. – devjs11

+0

Ich habe hier getestet und es funktioniert, möglicherweise verwenden Sie eine ungerade Version von jQuery. Wenn Sie im Click-Handler von ".menu a" "alert (event)" angeben, was sagt es Ihnen? –

2

Sie können auch Klicks auf das gesamte Dokument erkennen und überprüfen, ob das aktuelle Element ist

Element Ihr Menü angeklickt
$(document).click(function(event){ 
    if(event.target !== $('.menu')[0]) { 
     // hide the menu... 
    } 
});​ 
0
$('html').click(function(e) { 

     /* exept elements with class someClass */ 
     if($(e.target).hasClass('someClass')){ 
      e.preventDefault(); 
      return; 
     } 

     /* but be carefull the contained links! to be clickable */ 
     if($(e.target).is('a')){ 
      return; 
     } 

     /* here you can code what to do when click on html */ 

    });