2012-08-02 13 views
7

La idea básica es que tengo un montón de div en el que cada uno se puede alternar (mostrar/ocultar).Jquery alternar (Haga clic para mostrar un div mientras oculta otros)

Cuando se alterna un div, me gustaría que otros divs se oculten, permitiendo que solo se muestre un solo div a la vez.

Además, me gustaría poder hacer clic fuera del elemento para ocultar el div abierto también.

Solo para aclarar las cosas proporcioné un ejemplo que actualmente hace todo lo que quiero excepto cerrar un div al abrir otra (solo una funcionalidad de div abierto a la vez).

http://jsfiddle.net/walker2238/NFTFw/27/

Actualización: Problema resuelto gracias por las sugerencias y tomar el tiempo para que me ayude a cabo.

+1

¿El acordeón hace lo que quiere? http://jqueryui.com/demos/accordion/ –

+0

@KieranAndrews: Parece que sí, excepto que no se cierra automáticamente cuando haces clic en otro sitio. –

+0

Hay una configuración para eso, déjame encontrarla. –

Respuesta

8

resuelve en http://jsfiddle.net/NFTFw/29/

Es, básicamente, sólo tiene que ocultar todos los divs excepto el que se alternará.

+0

Sí, casi ... lo intentaré. – walker2238

+0

Esto es exactamente lo que quería. Gracias por una respuesta rápida con una respuesta directa. – walker2238

+0

Esto tiene errores, aún. Si hace clic en un elemento del menú, cerrará el menú ... –

0

Este código debería ser el truco, sin el uso de bibliotecas adicionales. :)

http://jsfiddle.net/NFTFw/42/

$(document).ready(function(){ 

    var dd = $(".dropdown-container"); 

    $("a.dropdown-link").click(function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    dd.hide(); 
    $(this).next().show(); 
    }); 

    $(document).click(function() { 
    dd.hide(); 
    }); 

    dd.click(function(e) { 
    e.stopPropagation(); 
    }); 
}); 
+0

No puede hacer clic en un enlace div abierto para volver a cerrarlo con su solución. –

0

ver este violín ...

http://jsfiddle.net/SDaCu/1/

+0

Esto es incorrecto porque no puede hacer clic en el enlace de un div abierto para cerrarlo de nuevo. –

+0

Sí, eso es extraño, no guardó mi violín en todo el camino ... Agregaré la declaración de verificación nuevamente en ... –

0

Aquí van:

$("a.dropdown-link", $dropdown).click(function(e) { 
    e.preventDefault(); 
    $(".dropdown-container").hide(); 
    $("div.dropdown-container", $dropdown).toggle(); 
    return false; 
}); 

Nota la línea añadido:

$(".dropdown-container").hide(); 

Acabamos de ocultar todas las cosas antes de alternar el div que queremos.

+0

Entonces no puede hacer clic en el enlace de un div abierto para cerrarlo de nuevo. –

1

intente lo siguiente:

$(document).ready(function(){ 

    $("a.dropdown-link").click(function(e) { 
    e.preventDefault(); 
    var $div = $(this).next('.dropdown-container'); 
    $(".dropdown-container").not($div).hide(); 
    if ($div.is(":visible")) { 
     $div.hide() 
    } else { 
     $div.show(); 
    } 
}); 

    $(document).click(function(e){ 
     var p = $(e.target).closest('.dropdown').length 
     if (!p) { 
      $(".dropdown-container").hide(); 
     } 
    }); 

}); 

DEMO

+0

Esto funcionó para mí. Gracias. – mutiemule

0
$(document).ready(function(){ 

     $('div.dropdown').each(function() { 
     var $dropdown = $(this); 

     $("a.dropdown-link", $dropdown).click(function(e) { 
      e.preventDefault(); 
      $("div.dropdown-container").hide(); 
      if($("div.dropdown-container", $dropdown).hide()){ 
       $("div.dropdown-container", $dropdown).show(); 
      }else{ 
       $("div.dropdown-container", $dropdown).hide(); 
      } 
      return false; 
     }); 

    }); 

     $('html').click(function(){ 
     $("div.dropdown-container").hide(); 
     }); 

    }); 

http://jsfiddle.net/NFTFw/40/

+0

No puede hacer clic en un enlace div abierto para volver a cerrarlo; el '.hide()' comprueba primero y luego el alternador improvisado no resuelve ese problema. –

2

me hizo tan corto como sea posible! Feliz codificación!

$(document).ready(function(){ 
    $(document).on("click", "a", function(event){ 
    $(this).siblings().show() 
    $(this).parent().siblings().each(function(index,element){ 
     $(element).find(".dropdown-container:visible").hide(); 
    }); 
    }); 
}); 

Demostración: http://jsfiddle.net/NFTFw/60/

2

Se puede utilizar a modo inteligente y fácil de implementar mediante el uso de abajo Código:

<div id="dropdown-1" class="dropdown dropdown-processed"> 
    <a class="dropdown-link" href="#">Options</a> 
    <div class="dropdown-container" style="display: none;"> 
    <ul> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li>Item 3</li> 
    </ul> 
    </div> 
</div> 

<div id="dropdown-2" class="dropdown dropdown-processed"> 
    <a class="dropdown-link" href="#">Options</a> 
    <div class="dropdown-container" style="display: none;"> 
    <ul> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li>Item 3</li> 
    </ul> 
    </div> 
</div> 

<div id="dropdown-3" class="dropdown dropdown-processed"> 
    <a class="dropdown-link" href="#">Options</a> 
    <div class="dropdown-container" style="display: none;"> 
    <ul> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li>Item 3</li> 
    </ul> 
    </div> 
</div> 

$(document).ready(function(){ 
 

 
$(".dropdown-link").click(function(){ 
 
$(".dropdown-container").slideUp('slow') 
 
$(this).closest('.dropdown').find('.dropdown-container').slideDown('slow'); 
 
    
 
}); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="dropdown-1" class="dropdown dropdown-processed"> 
 
    <a class="dropdown-link" href="#">Options</a> 
 
    <div class="dropdown-container" style="display: none;"> 
 
    <ul> 
 
     <li>Item 1</li> 
 
     <li>Item 2</li> 
 
     <li>Item 3</li> 
 
    </ul> 
 
    </div> 
 
</div> 
 

 
<div id="dropdown-2" class="dropdown dropdown-processed"> 
 
    <a class="dropdown-link" href="#">Options</a> 
 
    <div class="dropdown-container" style="display: none;"> 
 
    <ul> 
 
     <li>Item 1</li> 
 
     <li>Item 2</li> 
 
     <li>Item 3</li> 
 
    </ul> 
 
    </div> 
 
</div> 
 

 
<div id="dropdown-3" class="dropdown dropdown-processed"> 
 
    <a class="dropdown-link" href="#">Options</a> 
 
    <div class="dropdown-container" style="display: none;"> 
 
    <ul> 
 
     <li>Item 1</li> 
 
     <li>Item 2</li> 
 
     <li>Item 3</li> 
 
    </ul> 
 
    </div> 
 
</div>

Ejemplo de trabajo Enlace: http://jsfiddle.net/NFTFw/1901/

Cuestiones relacionadas