2016-09-25 7 views
0

Das ist, was ich bisher: Zum Beispiel, wenn ich auf button1, content1 zeigt, wenn ich auf button2 klicke, schließt content1 und content2 erscheint . , die bisher mit diesem Code funktioniert:div auf einen Klick anzeigen/ausblenden, wenn außerhalb des div geklickt

$("#buttons a").click(function(e){ 
    e.preventDefault(); 
    var toShow = $(this).attr('href'); 
    $(".togg").fadeOut(); 
    $(toShow).fadeIn(); 
    }); 

JSFiddle Was ich versuche diese Funktion zu tun ist, halten, aber einige Dinge hinzufügen: wenn content1 bereits geöffnet ist, Toggle es, wenn ich auf die entsprechende Schaltfläche klicken (button1), und schalten Sie es auch um, wenn Sie außerhalb von content1 div klicken. Kurz gesagt, ich möchte es umschalten, wenn irgendwo anders als das Div selbst geklickt wird.

+0

, die nicht gute Idee ist, in 'href' Attribute relevante Klassennamen zu schreiben. Verwenden Sie stattdessen das Attribut "data-*". – Mohammad

+1

Suchst du das vielleicht ?: http://stackoverflow.com/questions/1403615/use-jquery-to-hide-a-div-when-the-user-clicks-outside-of-it – Omnisite

+0

Überprüfen Sie meine Antwort http://StackOverflow.com/a/39687580/6608101 –

Antwort

2

Wie Sie wollen prüfen, ob die auf das Element ist oder außerhalb des Elements, für die Sie überprüfen müssen nodeName oder tagName oder id

$(document).click(function(e) { 
    //Check the element is none of the DIVS which we wants prevent. 
    if(e.target.id != "content1" && e.target.id != "content2" && e.target.id != "content3") 
    { 
     //Hide the content div which is visible now. 
     $('div.togg:visible').hide(); 
    } 
}); 

Sie müssen nur einen dynamischen Wähler schaffen Art zu erreichen der dynamischen Umschaltfunktion.

$("#buttons a").click(function(e){ 
    var selector = $('.'+$(this).attr('id')); 
    selector.toggle(); 
    $('div.togg').not(selector).hide(); 
}); 

$("#buttons a").click(function(e){ 
 
    var selector = $('.'+$(this).attr('id')); 
 
    selector.toggle(); 
 
    $('div.togg').not(selector).hide(); 
 
}); 
 
$(document).click(function(e) { 
 
    //Check the element is none of the DIVS which we wants prevent. 
 
    if(e.target.id != "content1" && e.target.id != "content2" && e.target.id != "content3") 
 
    { 
 
     //Hide the content div which is visible now. 
 
     $('div.togg:visible').hide(); 
 
    } 
 
});
.content1 {display:none;} 
 
.content2 {display:none;} 
 
.content3 {display:none;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="buttons"> 
 
    <a href="#" id="content1">Div 1</a> 
 
    <a href="#" id="content2">Div 2</a> 
 
    <a href="#" id="content3">Div 3</a> 
 
</div> 
 
<div> 
 
    <div class="content1 togg">1111</div> 
 
    <div class="content2 togg">2222</div> 
 
    <div class="content3 togg">3333</div> 
 
</div>

+0

Ja! Das funktioniert perfekt, genau das, wonach ich gefragt habe! – AthScc

+0

Akzeptiere meine Antwort, wenn es dir geholfen hat, es wird andere Leute ermutigen, diese Lösung zu benutzen. –

Verwandte Themen