He leído las publicaciones aquí, el sitio Bootstrap, y busqué en Google como loco, pero no puedo encontrar lo que estoy seguro es una respuesta fácil ...
Tengo un modal de Bootstrap que abro desde un link_to helper como este:
<%= link_to "New Contact", new_contact_path, {remote: true, 'data-toggle' => 'modal', 'data-target' => "#myModal", class: "btn btn-primary"} %>
En mi ContactsController.create
acción, tengo un código que crea y Contact
luego pasa a create.js.erb
. En create.js.erb
, tengo un código de manejo de errores (una combinación de ruby y javascript). Si todo va bien, quiero cerrar el modal.
Aquí es donde estoy teniendo problemas. Parece que no puedo descartar el modal cuando todo va bien.
Lo he intentado $('#myModal').modal('hide');
y esto no tiene ningún efecto. También probé $('#myModal').hide();
qué hace que el modal se descarte pero deja el telón de fondo.
¿Alguna guía sobre cómo cerrar el modal y / o descartar el telón de fondo desde dentro create.js.erb
?
Editar
Aquí está el marcado para myModal:
<div class="modal hide" id="myModal" >
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3>Add Contact</h3>
<div id="errors_notification">
</div>
</div>
<div class="modal-body">
<%= form_for :contact, url: contacts_path, remote: true do |f| %>
<%= f.text_field :first_name, placeholder: "first name" %>
<%= f.text_field :last_name, placeholder: "last name" %>
<br>
<%= f.submit "Save", name: 'save', class: "btn btn-primary" %>
<a class="close btn" data-dismiss="modal">Cancel</a>
<% end %>
</div>
<div class="modal-footer">
</div>
</div>
fuente
$('#myModal').modal('hide');
es la sintaxis correcta para cerrar / ocultar el modal con idmyModal
(puede probar esto en la página de documentación de Bootstrap ). ¿Estás seguro de que tienes un elemento con esta identificación en tu página? Además, ¿qué estás tratando de lograr con esta llamada? Su implementación actual realiza una solicitud de Ajaxnew_contact_path
y al mismo tiempo abre el modal con el contenido de#myModal
: ¿es esto lo que desea?myModal
. Lo volví a intentar$('myModal').modal('hide')
y aún no sirve. HM En términos de lo que estoy tratando de lograr, creo que puede haber sido incorrecto usar el link_to ayudante. He reemplazado esto con:<a data-toggle="modal" href="#myModal" class="btn btn-primary">Add Contact</a>
ya que realmente no necesito una llamadanew_contact_path
. Solo quiero que el modal se abra y luego trate con la entrada del usuario. Gracias por tomarse el tiempo de responder. Veré si no puedo resolver esto.$('#myModal').modal('hide');
(#
falta un comentario).$('#myModal').modal('hide')
. JRespuestas:
Con el modal abierto en la ventana del navegador, use la consola del navegador para probar
Si funciona (y el modal se cierra), entonces sabrá que su Javascript cerrado no se envía correctamente desde el servidor al navegador.
Si no funciona, debe investigar más sobre el cliente lo que está sucediendo. Por ejemplo, asegúrese de que no haya dos elementos con la misma identificación. Por ejemplo, ¿funciona la primera vez después de cargar la página pero no la segunda?
Consola del navegador: firebug para firefox, la consola de depuración para Chrome o Safari, etc.
fuente
a cerca de arranque modal puede pasar 'ocultar' como opción de método modal de la siguiente
Por favor, eche un vistazo al violín de trabajo aquí
bootstrap también proporciona eventos que puede conectar a la funcionalidad modal , como si desea activar un evento cuando el modal ha terminado de ocultarse para el usuario, puede usar el evento hidden.bs.modal . Puede leer más sobre métodos modales y eventos aquí en Documentación
Si no funciona ninguno de los métodos anteriores, asigne una identificación a su botón de cerrar y haga clic en el botón de cerrar.
fuente
Yo uso Bootstrap 3.4 Para mí esto no funciona
$('#myModal').modal('hide')
Desesperado, hice esto:
Tal vez no sea elegante, pero funciona
fuente
La mejor forma de ocultar y mostrar un modal con bootstrap es
fuente
Estaba experimentando el mismo error y esta línea de código realmente me ayuda.
fuente
fuente
Encontré la solución correcta, puedes usar este código
fuente
Me encontré con lo que creo que era un problema similar. El
$('#myModal').modal('hide');
es probable que correr a través de esa función y golpea la líneaEl problema es que el valor isShown puede estar indefinido incluso si se muestra el modal y el valor debe ser verdadero. He modificado el código de arranque ligeramente a lo siguiente
Esto pareció resolver el problema en su mayor parte. Si el telón aún permanece, siempre puede agregar una llamada para eliminarlo manualmente después de la llamada oculta
$('.modal-backdrop').remove();
. No es ideal en absoluto, pero funciona.fuente
(Refiriéndose a Bootstrap 3), para ocultar el uso modal:
$('#modal').modal('hide')
. Pero la razón por la que el telón colgaba (para mí) era porque estaba destruyendo el DOM para el modal antes de que terminara 'ocultar'.Para resolver esto, encadené el evento oculto con la eliminación de DOM. En mi caso:
this.render()
fuente
this.render()
muestraundefined is not a function
en mi consola Chrome?Tuve más suerte haciendo la llamada después de que ocurriera la devolución de llamada "mostrada":
Esto aseguró que el modal se cargara antes de que se hiciera la llamada hide ().
fuente
Lo que encontramos fue que solo hubo un ligero retraso entre la llamada a nuestro código de servidor y el regreso a la llamada exitosa. Si envolvimos la llamada al servidor en el
$("#myModal").on('hidden.bs.modal', function (e)
controlador y luego llamamos al$("#myModal").modal("hide");
método, el navegador ocultaría el modal y luego invocaría el código del lado del servidor.De nuevo, no elegante pero funcional.
Como puede ver, cuando
myFunc
se invoca, ocultará el modal y luego invocará el código del lado del servidor.fuente
Estaba experimentando el mismo problema, y después de un poco de experimentación encontré una solución. En mi controlador de clics, necesitaba evitar que el evento apareciera, así:
fuente
Aquí está el documento: http://getbootstrap.com/javascript/#modals-methods
Aquí está el método: $ ('# myModal'). Modal ('hide')
Si necesita abrir varias veces el modal con contenido diferente, sugiero agregar (en su js principal):
Así que limpiará el contenido para la próxima apertura y evitará una especie de almacenamiento en caché
fuente
fuente
Incluso yo tengo el mismo tipo de problemas. Esto me ayudó mucho
fuente
Usé este código simple:
fuente
$('#modal').modal('hide');
y sus variantes no funcionaron para mí a menos que tuvieradata-dismiss="modal"
como atributo el botón Cancelar. Al igual que usted, mis necesidades eran posiblemente cerrar / posiblemente no cerrar en función de alguna lógica adicional, por lo que hacer clic en un enlacedata-dismiss="modal"
directamente no funcionaría. Terminé teniendo un botón oculto con eldata-dismiss="modal"
que podía invocar mediante programación el controlador de clics, así quey luego dentro de los controladores de clic para cancelar cuando necesite cerrar el modal que puede tener
fuente
Tenemos que ocuparnos del evento burbujeante. Necesita agregar una línea de código
fuente
Me doy cuenta de que esta es una vieja pregunta, pero descubrí que ninguno de ellos era realmente lo que estaba buscando exactamente. Parece ser causado por intentar cerrar el modal antes de que termine de mostrarse.
Mi solución se basó en la respuesta de @ schoonie23 pero tuve que cambiar algunas cosas.
Primero, declaró una variable global en la parte superior de mi script:
Luego en mi código modal:
Entonces esto: (Tenga en cuenta el nombre 'shown.bs.modal' que indica que el modal se ha mostrado completamente en lugar de 'show' que se activa cuando se llama al evento show. (Originalmente intenté solo 'mostrado' pero no funcionó. )
Espero que esto le ahorre a alguien la investigación extra algún día. Pasé un poco buscando una solución antes de llegar a esto.
fuente
Usé este código
Ocultar modal con efecto suave con Fade Out.
fuente
Si está utilizando la clase cerrada en sus modales, lo siguiente funcionará. Dependiendo de su caso de uso, generalmente recomiendo filtrar solo al modal visible si hay más de un modales con la clase cerrada.
fuente
document.getElementById ('closeButton'). click (); // agregue un atributo data-dispats = "modal" a un elemento en el modal y dele esta identificación
fuente
Esta es una mala práctica, pero puede usar esta técnica para cerrar modal llamando al botón de cerrar en javascript. Esto cerrará modal después de 3 segundos.
fuente
Esto se puede hacer en HTML:
fuente