Estoy usando el diálogo modal de arranque de Twitter. Cuando hago clic en el botón Enviar del cuadro de diálogo modal de arranque, envía una solicitud AJAX. Mi problema es que el fondo modal no desaparece. El cuadro de diálogo modal desaparece correctamente, pero en su lugar permanece "modal-backdrop in" que crea la opacidad en la pantalla
¿Que puedo hacer?
twitter-bootstrap
modal-dialog
paganotti
fuente
fuente
$('#myModal').modal('hide')
? ¿Puedes poner un código aquí?Respuestas:
Asegúrese de no reemplazar el contenedor que contiene la ventana modal real cuando realiza la solicitud AJAX, porque Bootstrap no podrá encontrar una referencia cuando intente cerrarlo. En su controlador Ajax completo, elimine el modal y luego reemplace los datos.
Si eso no funciona, siempre puede forzarlo a desaparecer haciendo lo siguiente:
fuente
$('.modal-backdrop').remove()
parece romper futuros modales abriéndose correctamente.Asegúrese de que su llamada inicial
$.modal()
para aplicar el comportamiento modal no pase más elementos de los que pretendía. Si esto sucede, terminará creando una instancia modal, completa con un elemento de fondo, para CADA elemento de la colección. En consecuencia, puede parecer que el fondo se ha quedado atrás, cuando en realidad estás viendo uno de los duplicados.En mi caso, estaba intentando crear el contenido modal sobre la marcha con un código como este:
Aquí, el comentario HTML después de la
</div>
etiqueta de cierre significaba que myModal era en realidad una colección jQuery de dos elementos: el div y el comentario. Ambos se convirtieron obedientemente en modales, cada uno con su propio elemento de fondo. Por supuesto, el modal hecho del comentario era invisible aparte del fondo, así que cuando cerré el modal real (el div) parecía que el fondo se había quedado atrás.fuente
Acabo de pasar demasiado tiempo en este problema :)
Si bien las otras respuestas proporcionadas son útiles y válidas, me pareció un poco complicado recrear efectivamente la funcionalidad de ocultación modal de Bootstrap, por lo que encontré una solución más limpia.
El problema es que hay una cadena de eventos que ocurren cuando llamas
Cuando luego reemplaza un montón de HTML como resultado de la solicitud AJAX, los eventos de ocultación modal no finalizan. Sin embargo, Bootstrap desencadena un evento cuando todo está terminado , y puedes conectarlo así:
Espero que esto sea útil!
fuente
$('#myModal').removeClass('fade');$(myModal').modal('hide')'
Inserte en su botón de acción esto:
y
ejemplo:
si ingresa este atributo de datos, no aparecerá el telón de fondo .modal. documentación al respecto en este enlace: http://getbootstrap.com/javascript/#modals-usage
fuente
data-backdrop="false"
es simplemente una opción que le dice a bootstrap que no use ningún fondo . Esto no tiene nada que ver con el problema real, solo lo evita. Sería como decir "No puedo nadar, así que dejé de meterme en la piscina". Eso es genial, pero aún no puedes nadar y si tu jefe te tira al fondo, te ahogarás. Hay muchos casos en los que se requiere intervención manual, como cuando Angular pisa fuerte el DOM en el fondo de su aplicación.Si está utilizando una copia y pega desde el sitio getboostrap en un selector generado por HTML, asegúrese de eliminar el comentario '<! - /.modal ->'. Bootstrap se confunde y piensa que el comentario es un segundo elemento modal. Crea otro retroceso para este "segundo" elemento.
fuente
Sé que esta es una publicación muy antigua, pero podría ayudar. Esta es una solución muy pequeña para mí
Eso es todo, esto debería resolver el problema
fuente
myModal
supone que es? ¿Y por qué cerraría el diálogo? Los cuadros de diálogo modales solo se cierran haciendo clic en el botón Cerrar o haciendo clic fuera del cuadro de diálogo. Esto no parece ser una solución.Sufrí un problema similar: en mi ventana modal, tengo dos botones, "Cancelar" y "Aceptar". Originalmente, ambos botones cerrarían la ventana modal invocando
$('#myModal').modal('hide')
(con "OK" ejecutando previamente algún código) y el escenario sería el siguiente:bueno, mi compañero de escritorio siguiente me salvó el día: en lugar de invocar
$('#myModal').modal('hide')
, asigne a sus botones el atributodata-dismiss="modal"
y agregue un evento "clic" a su botón "Enviar". En mi problema, el código HTML (bueno, TWIG) para el botón es:y en mi código JavaScript, tengo:
mientras que ningún evento de "clic" se atribuye al botón "Cancelar". El modal ahora se cierra correctamente y me permite volver a jugar con la página "normal". En realidad, parece que
data-dismiss="modal"
debería ser la única forma de indicar que un botón (o cualquier elemento DOM) debería cerrar un modal de Bootstrap. El.modal('hide')
método parece comportarse de una manera poco controlable.¡Espero que esto ayude!
fuente
Este problema también puede ocurrir si oculta y luego vuelve a mostrar la ventana modal demasiado rápido. Esto se mencionó en otra parte para preguntas, pero proporcionaré más detalles a continuación.
El problema tiene que ver con el tiempo y la transición de desvanecimiento. Si muestra un modal antes de que se complete la transición de desvanecimiento para el modal anterior, verá este problema de fondo persistente (el fondo modal permanecerá en la pantalla, en su camino). Bootstrap explícitamente no admite múltiples modales simultáneos, pero esto parece ser un problema incluso si el modal que está ocultando y el modal que está mostrando son los mismos.
Si esta es la razón correcta de su problema, aquí hay algunas opciones para mitigar el problema. La opción n. ° 1 es una prueba rápida y fácil para determinar si el tiempo de transición de desvanecimiento es realmente la causa de su problema.
Aquí hay algunas publicaciones relacionadas con el rastreador de problemas de arranque. Es posible que haya más publicaciones de rastreadores de las que he enumerado a continuación.
fuente
.modal ('ocultar')
Oculta manualmente un modal. Regresa a la persona que llama antes de que el modal se haya ocultado realmente (es decir, antes de que ocurra el evento hidden.bs.modal).
Entonces en lugar de
hacer
Por lo tanto, debe esperar hasta que finalice el evento "ocultar".
fuente
Otro posible error que podría producir este problema,
¡Asegúrese de no haber incluido el
bootstrap.js
script más de una vez en su página!fuente
Incluso me encontré con un problema similar, tenía los siguientes dos botones
Quería realizar alguna operación ajax y, en caso de éxito de esa operación, cerrar el modal. Así que aquí está lo que hice.
Activé el evento de clic del botón 'No' que tenía la
data-dismiss="modal"
propiedad. Y esto funcionó :)fuente
utilizar:
Fuente
fuente
Esta solución es para Ruby on Rails 3.xy un archivo js.erb que reconstruye parte del DOM, incluido el modal. Funciona independientemente de si la llamada ajax vino del modal o de una parte diferente de la página.
Gracias a @BillHuertas por el punto de partida.
fuente
$ ('# myModal'). trigger ('clic');
Esto funcionó para mí. No se cierra porque cuando abres la ventana emergente, se activan 2 o 3 fondos de fondo modales. Entonces, cuando haces $ ('# myModal')). Modal ('hide'); solo afecta a un fondo modal y queda el resto.
fuente
problema del panel de actualización.
Mi problema se debió a la ubicación del panel de actualización. Tenía todo el modal en el panel de actualización. Si declara el modal fuera del panel de actualización y solo tiene que decir, el cuerpo modal, en el panel de actualización, entonces el $ ('# myModalID'). Modal ('hide'); trabajó.
fuente
Otro punto de vista a esta pregunta. (Estoy usando el bootstrap.js versión 3.3.6)
Me equivoqué al inicializar modal tanto manualmente en javascript:
y usando
data-toggle="modal"
en este botón como el ejemplo a continuación (se muestra en el documento)
así que el resultado es crear dos instancias de
agregar al cuerpo de mi html cuando abra el modal. Esta puede ser la causa al cerrar el modal utilizando la función:
elimina solo una instancia de fondo (como se muestra arriba) para que el fondo no desaparezca. Pero desapareció si usa
data-dismiss="modal"
add on html como se muestra en el documento de bootstrap.Entonces, la solución a mi problema es inicializar modal solo manualmente en javascript y no usar el atributo de datos. De esta manera, puedo cerrar el modal manualmente y usando
data-dismiss="modal"
características.Espero que esto ayude si te encuentras con el mismo problema que yo.
fuente
Para su información, en caso de que alguien todavía se encuentre con esto ... He pasado alrededor de 3 horas para descubrir que la mejor manera de hacerlo es la siguiente:
Esa función para cerrar el modal es muy poco intuitiva.
fuente
Agregar
data-dismiss="modal"
cualquier botón en mi modal funcionó para mí. Quería que mi botón llamara a una función con angular para disparar una llamada ajax Y cerrar el modal, así que agregué un.toggle()
dentro de la función y funcionó bien. (En mi caso usé aybootstrap modal
usé algunosangular
, no un controlador modal real).fuente
Yo tuve el mismo problema. Descubrí que se debía a un conflicto entre Bootstrap y JQueryUI.
Ambos usan la clase "cerrar". Cambiar la clase en uno u otro arregla esto.
fuente
Usando alternar en lugar de ocultar, resolvió mi problema
fuente
Asegúrese de no utilizar el mismo elemento Id / clase en otro lugar, para un elemento no relacionado con el componente modal.
Es decir ... si está identificando sus botones que activan las ventanas emergentes modales utilizando el nombre de clase 'myModal', asegúrese de que no haya elementos no relacionados que tengan el mismo nombre de clase.
fuente
Después de aplicar la solución mejor calificada, tuve el problema de que rompe los modales futuros abriéndose correctamente. He encontrado mi solución que funciona bien
fuente
Tuve el mismo problema al intentar enviar el formulario. La solución fue cambiar el tipo de botón de
submit
abutton
y luego controlar el evento de clic de botón, así:fuente
En el proyecto .net MVC4 tuve la ventana emergente modal (bootstrap 3.0) dentro de un Ajax.BeginForm (OnComplete = "addComplete" [código extra eliminado]). Dentro del javascript "addComplete" tenía el siguiente código. Esto resolvió mi problema.
fuente
Tuve este mismo problema.
Sin embargo, estaba usando bootbox.js, por lo que podría haber tenido algo que ver con eso.
De cualquier manera, me di cuenta de que el problema estaba siendo causado por tener un elemento con la misma clase que su padre. Cuando uno de estos elementos se usa para enlazar una función de clic para mostrar el modal, entonces se produce el problema.
es decir, esto es lo que causa el problema:
cámbielo para que el elemento en el que se hace clic no tenga la misma clase que su padre, cualquiera de sus hijos o cualquier otro antepasado. Probablemente sea una buena práctica hacer esto en general cuando se vinculan las funciones de clic.
fuente
Estoy trabajando con Meteor y acabo de tener el mismo problema. La causa de mi error fue esta:
Como puede ver, agregué el modal en lo demás, por lo que cuando mi modal actualizó la información de contacto, si tenía otro estado. Esto provocó que la plantilla modal quedara fuera del DOM justo antes de que se cerrara.
La solución: mover el modal fuera del if-else:
fuente
violín -> https://jsfiddle.net/o6th7t1x/4/
fuente
el valor inicial de su atributo de telón de fondo de datos puede ser
"estático", "verdadero", "falso".
static y true agregan la sombra modal, mientras que false deshabilita la sombra, por lo que solo necesita cambiar este valor con el primer clic en falso. Me gusta esto:
fuente
Tuve el problema modal de congelación de pantalla de fondo, pero en un escenario ligeramente diferente: cuando se mostraban 2 modales consecutivos. Por ejemplo, el primero pediría confirmación para hacer algo y después de hacer clic en el botón 'confirmar', la acción se encontraría con un error y el segundo modal se mostraría para mostrar el mensaje de error. El segundo fondo modal congelaría la pantalla. No hubo enfrentamientos en los nombres de clase o id de los elementos.
La forma en que se solucionó el problema fue darle al navegador suficiente tiempo para lidiar con el fondo modal. En lugar de tomar la acción inmediatamente después de hacer clic en 'confirmar', dele al navegador 500ms para ocultar el primer modal y limpiar el fondo, etc., y luego realice la acción que terminaría mostrando el modal de error.
La función _dialogConfirmed () tiene el siguiente código:
Supongo que las otras soluciones funcionaron porque tomaron suficiente tiempo extra para darle al navegador el tiempo de limpieza necesario.
fuente
En ASP.NET, agregue una actualización para UpdatePanel en el código detrás del comando jquery. Ejemplo:
fuente