2012-04-10 2 views
1

Ich habe eine Reihe von divs, die, wenn ich auf eines klicke, es öffnen sollte und schließen alle anderen, die offen sind. Sollte nur ein offenes div wenn überhaupt sein. Ich habe Schwierigkeiten, den zu schließen, auf den ich vom Schließen klicke. Hat jemand irgendwelche Gedanken? Javascript und HTML folgen:jQuery - Klicken Sie auf ein div, schließen Sie alle anderen Ausgabe

$('.m_box').hide(); 
    $('.a_box').hide(); 

    $('#m2012').click(function(){ 
     //$('.m_box').hide(); 
     $('#m2012_box').toggle(); 
    }); 

    $('#m2011').click(function(){ 
     //$('.m_box').hide(); 
     $('#m2011_box').toggle(); 
    }); 

    $('#m2010').click(function(){ 
     //$('.m_box').hide(); 
     $('#m2010_box').toggle(); 
    }); 

    <div id="m2012" style="float:left; margin:0 69px 0 0; width:15px; height:19px; cursor:pointer;"> 
     <div id="m2012_box" class="m_box" style="float:left; display:block; position:absolute; width:308px; height:351px; top:20px; margin-left:-37px; color:#ffffff; background:url('images/graph/list_background_left.png'); z-index:2000;"> 
      <div class="list_header"> 
       <p>2012</p> 
      </div> 
      <div class="items"> 
       <div class="list_item"> 
        Milestone 1 
       </div> 
       <div class="list_item"> 
        Milestone 2 
       </div> 
       <div class="list_item"> 
        Milestone 3 
       </div> 
       <div class="list_item"> 
        Milestone 4 
       </div> 
       <div class="list_item"> 
        Milestone 5 
       </div> 
       <div class="list_item"> 
        Milestone 6 
       </div> 
      </div> 
     </div> 
    </div> 

    <div id="m2011" style="float:left; margin:0 69px 0 0; width:15px; height:19px; cursor:pointer;"> 
     <div id="m2011_box" class="m_box" style="float:left; display:block; position:absolute; width:308px; height:351px; top:20px; margin-left:-37px; color:#ffffff; background:url('images/graph/list_background_left.png'); z-index:2000;"> 
      <div class="list_header"> 
       <p>2011</p> 
      </div> 
      <div class="items"> 
       <div class="list_item"> 
        Milestone 1 
       </div> 
       <div class="list_item"> 
        Milestone 2 
       </div> 
       <div class="list_item"> 
        Milestone 3 
       </div> 
      </div> 
     </div> 
    </div> 

    <div id="m2010" style="float:left; margin:0 69px 0 0; width:15px; height:19px; cursor:pointer;"> 
     <div id="m2010_box" class="m_box" style="float:left; display:block; position:absolute; width:308px; height:351px; top:20px; margin-left:-37px; color:#ffffff; background:url('images/graph/list_background_left.png'); z-index:2000;"> 
      <div class="list_header"> 
       <p>2010</p> 
      </div> 
      <div class="items"> 
       <div class="list_item"> 
        Milestone 1 
       </div> 
       <div class="list_item"> 
        Milestone 2 
       </div> 
       <div class="list_item"> 
        Milestone 3 
       </div> 
      </div> 
     </div> 
    </div> 

Antwort

1

Um geklickt div des Kindes auszuschließen sind (die nur als ich sehe) vom Wähler Sie not verwenden können:

$('#m2012, #m2011, #m2010').click(function() { 
    $('.m_box').not($(this).children().show()).hide(); 
}); 

UPD: modifiziert, um den Code, so dass es das Kind öffnet.

+0

Das hat es geschafft! zusammen mit: $ ('# name_of_div').Umschalten(); Ausschluss der angeklickt Div und dann Umschalten der div ist genau das, was ich brauchte. Vielen Dank. –

+0

Wenn es angenommen wurde, funktioniert diese Antwort nicht. @DaveRottino Warum nicht die höchste Antwort wählen? – iambriansreed

-1

Sie können mit jQuery zu fadeIn und fadeOut die divs, auf Click-Ereignis versuchen. Hier ist ein Beispiel;

$('#clickme').click(function() { 
    $('#book').fadeOut('slow', function() { 
    // Animation complete. 
    }); 
}); 

Das bedeutet, wenn das div klicke ich angeklickt wird, wird es ausgeblendet oder verblasst in dem Buch div

0

Sie sollten die gemeinsame Klasse verwenden und die sichtbar alle auszuwählen und sie verstecken zuerst .

$('.m_box').click(function(){ 
    $('.m_box:visible').hide(); 
    $(this).show(); 
}); 
0

Es gibt zwei große vorgefertigte jQuery-Bibliotheken, die damit umgehen können:

jQuery Tools ermöglichen f oder die größte Flexibilität, und die Umsetzung sollte relativ einfach sein. jQuery UI erzwingt ein gewisses Styling, daher ist Tools wahrscheinlich der richtige Ansatz, wenn Sie eine Bibliothek verwenden möchten.

+1

dies wie eine Antwort aussehen nicht. poste es stattdessen als Kommentar als Antwort. – DG3

+0

Von "wie man fragt": "Die Antwort zu Ihrer Frage ist möglicherweise nicht immer die, die Sie wollten, aber das bedeutet nicht, dass es falsch ist." Dies ist eine Antwort auf die Frage. Es löst das Problem, auch wenn es nicht genau das ist, wonach Dave gefragt hat. – ramblinjan

+0

Auch wenn dies nicht genau das war, was er verlangte, wird dies wahrscheinlich für andere relevant sein, die diese Frage über die Suche stellen. – ramblinjan

2

Versuchen:

$('.list_header').click(function() { 
    $(this).parent().parent().siblings().find('.items').hide(); 
    $(this).siblings().show();  
});​ 

Beweis: http://jsfiddle.net/iambriansreed/J97Kq/

Meine Geige Ihre Inline-CSS aus Gründen der Übersichtlichkeit entfernt.

+1

Aber das tut nicht, was OP gefragt hat. Er will alle Sektionen schließen wenn man geöffnet ist oder? – elclanrs

+0

@elclanrs Danke. Aktualisiert. – iambriansreed

-1

sollten Sie einen Selektor alle div mit einem bestimmten Index wie diese zu schließen, schließen Sie diese Wähler alle divs mit einem Index größer als 1.

$('#m2012').click(function(){ 

$('#m2012_box').toggle(); 

     //index a integer value 

    $("div:gt(1)").hide(); 

}); 
Verwandte Themen