Bootstrap desplegable cerrar cuando se hace clic


Pongo un formulario dentro de un menú desplegable bootstrap, pero cuando hago clic en cualquiera de los campos del formulario, el menú desplegable desaparece. Tengo esta pieza de código, pero no se donde ponerlo para evitar que el menú desplegable desaparezca.

$(function test() {
  // Setup drop down menu
  $('.dropdown-toggle').dropdown();

  // Fix input element click problem
  $('.dropdown input, .dropdown label').click(function(e) {
    e.stopPropagation();
  });
});

¿Podría alguien por favor decirme dónde debo poner esto? Lo intenté en el menú desplegable de bootstrap, lo intenté dentro del HTML, pero todavía no funciona.

Author: Sorin Cioban, 2012-06-02

9 answers

Simplemente use este ejemplo.Esta solución funciona para mí.

<script type="text/javascript">
window.addEvent('domready',function() {    
   Element.prototype.hide = function() {
      $(function () { 
        // replace your tab id with myTab
        //<ul id="myTab" class="nav nav-tabs">
        $('#myTab li:eq(1) a').tab('show');
      });      
   };
});
</script>

Espero que ayude. Gracias.

 4
Author: Shiplu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-10 15:23:27

Puede omitir la llamada desplegable todos juntos, el menú desplegable bootstrap funciona sin ella. Asegúrese de que está envolviendo su script correctamente, puede incluirlo en el encabezado o cuerpo de su página, aunque personalmente prefiero colocarlo en el cuerpo de su página.

JS

<script type="text/javascript">
    $('.dropdown-menu input, .dropdown-menu label').click(function(e) {
        e.stopPropagation();
    });
</script>
 124
Author: Andres Ilich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-02 16:59:17

Pasó el tiempo desde que se aceptó la respuesta, pero si desea mantener el menú desplegable abierto, si actúa como una especie de diálogo, la mejor manera que creo es:

$('.dropdown').dropdown().on("hide.bs.dropdown", function(e) {
            if ($.contains(dropdown, e.target)) {
                e.preventDefault();
            //or return false;
            }
        });
 9
Author: lavrik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-18 09:28:56

Si desea dejar de cerrar solo algunos de los menús desplegables, no todos, simplemente agregue una clase adicional a su bloque ul:

<ul class="dropdown-menu keep-open-on-click">

Y usa este código:

$(document).on('click', '.dropdown-menu', function(e) {
    if ($(this).hasClass('keep-open-on-click')) { e.stopPropagation(); }
});
 9
Author: oleg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-29 21:02:55

Debe evitar que el evento burbujee en el árbol DOM:

$('.dropdown-menu').click(function(e) {
    e.stopPropagation();
});

Evento.stopPropagation evita que el evento llegue al nodo donde finalmente es manejado por Bootstrap hiding menu.

 7
Author: Vishnu T Asok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-24 11:02:10

Esto funciona para mi (barra lateral abriendo un enlace simple con palanca de arranque)

$('.dropdown').find("a").not('.dropdown-toggle').on("click",function(e){
    e.stopImmediatePropagation();
});
 5
Author: manuelprojects,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-08 15:56:17

Gracias por la respuesta anterior, estaba teniendo el mismo problema con los submenús debajo de los menús desplegables. Usando la solución anterior pude resolver el problema para esto también.

$('.dropdown-menu .dropdown-submenu a[data-toggle="dropdown-submenu"]').click(function (e)
{                   
    e.stopPropagation();
});
 4
Author: usugarbage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-25 16:12:38

Poner

<script type="text/javascript">
    $('.dropdown-menu').click(function(e) {
          e.stopPropagation();
    });
</script>

En la respuesta original, elimine todas las clases, y simplemente ponga ".menú desplegable " clase, funcionó para mí. tengo un campo de entrada dentro del menú desplegable.

Captura de pantalla del menú

 4
Author: River CR Phoenix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-12 08:54:35

Si miras a la parte inferior de fuentes del widget desplegable, verás esto:

$(document)
  .on('click.bs.dropdown.data-api', '.dropdown form', function(e) {
    e.stopPropagation()
  })

Así que tienes las siguientes opciones:

  1. Simplemente envuelva el menú desplegable con formulario
  2. O puede agregar el detector de eventos para el evento de clic de .menú desplegable YOUR_SELECTOR
$(document)
  .on('click.my', '.dropdown some_selector', function(e) {
    e.stopPropagation()
  })
 4
Author: Timofey Novitskiy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-04 09:37:55