Estoy usando el programa de arranque de Twitter, he especificado un modal
<div class="modal hide" id="modal-item">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">x</button>
<h3>Update Item</h3>
</div>
<form action="http://www.website.com/update" method="POST" class="form-horizontal">
<div class="modal-body">
Loading content...
</div>
<div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Close</a>
<button class="btn btn-primary" type="submit">Update Item</button>
</div>
</form>
</div>
Y los enlaces
<a href="http://www.website.com/item/1" data-target="#modal-item" data-toggle="modal">Edit 1</a>
<a href="http://www.website.com/item/2" data-target="#modal-item" data-toggle="modal">Edit 2</a>
<a href="http://www.website.com/item/3" data-target="#modal-item" data-toggle="modal">Edit 2</a>
Cuando hago clic en cualquiera de estos enlaces por primera vez, veo el contenido correcto, pero cuando hago clic en otros enlaces muestra el mismo contenido cargado por primera vez, no actualiza el contenido.
Quiero que se actualice cada vez que se hace clic.
PD: Puedo hacer que funcione fácilmente a través de la función jQuery personalizada, pero quiero saber si es posible con la función remota modal Bootstrap nativa, ya que debería ser lo suficientemente fácil y supongo que solo estoy complicando las cosas.
jquery
jquery-plugins
twitter-bootstrap
modal-dialog
Dhruv Kumar Jha
fuente
fuente
remote
modos están en desuso a partir de Bootstrap v3.2.1 y desaparecerán en v4.Respuestas:
El problema es doble.
Primero , una vez que se crea una instancia de un objeto modal, se adjunta de forma persistente al elemento especificado por
data-target
y las llamadas posteriores para mostrar que modal solo lo invocarátoggle()
, pero no actualizará los valores en eloptions
. Entonces, aunque loshref
atributos son diferentes en sus diferentes enlaces, cuando se alterna el modal, el valor deremote
no se actualiza. Para la mayoría de las opciones, se puede evitar esto editando directamente el objeto. Por ejemplo:Sin embargo, eso no funcionará en este caso, porque ...
En segundo lugar , el complemento Modal está diseñado para cargar el recurso remoto en el constructor del objeto Modal, lo que desafortunadamente significa que incluso si se realiza un cambio en el
options.remote
, nunca se volverá a cargar .Un remedio simple es destruir el objeto modal antes de alternarlo posteriormente. Una opción es simplemente destruirlo después de que termine de esconderse:
Nota: Ajuste los selectores según sea necesario. Este es el más general.
Saqueador
O podría intentar crear un esquema más complicado para hacer algo como verificar si el enlace que inicia el modal es diferente del anterior. Si es así, destruye; Si no es así, no es necesario volver a cargar.
fuente
hide
clase en el modal, por lo que si su ventana era demasiado pequeña, el modal podría haber estado bloqueando los eventos del mouse en los botones. Por alguna razón, JSFiddle.net es realmente malo esta mañana (obtuve un 504 tratando de actualizar), así que simplemente rehice el ejemplo en plnkr.co, que de todos modos es mejor para AJAX.bs.modal
en el$(this).removeData('bs.modal')
trabajado para mí con Bootstrap 3$('body').on('hidden.bs.modal', '.modal', function () { $(this).removeData('bs.modal'); });
var modalData = $(this).data('bs.modal'); if (modalData && modalData.options.remote)...
Para bootstrap 3 debes usar:
fuente
remoteData
línea:$(this).empty()
$(this).empty()
. Laremote
opción carga los datos remotos en el<div class="modal-content">
elemento anidado . Usar en su$('.modal-content', this).empty();
lugar.Para Bootstrap 3.1, querrá eliminar datos y vaciar el
modal-content
cuadro de diálogo en lugar de todo (3.0) para evitar el parpadeo mientras espera que se cargue el contenido remoto.Si está utilizando modales no remotos, el código anterior eliminará, por supuesto, su contenido una vez cerrado (incorrecto). Es posible que deba agregar algo a esos modales (como una
.local-modal
clase) para que no se vean afectados. Luego modifique el código anterior para:fuente
$(e.target).removeData("bs.modal").find(".modal-content").empty();
, es como si mi modal se ocultara de alguna manera y solo aparece la superposición gris.Gracias merv. Comencé a jugar boostrap.js pero su respuesta es una solución rápida y limpia. Esto es lo que terminé usando en mi código.
fuente
La respuesta aceptada no funcionó para mí, así que utilicé JavaScript para hacerlo.
fuente
Esto funciona con Bootstrap 3 FYI
fuente
Mi proyecto está construido en Yii y usa el complemento Bootstrap-Yii, por lo que esta respuesta solo es relevante si está usando Yii.
La corrección anterior funcionó, pero solo después de la primera vez que se mostró el modal. La primera vez que salió vacío. Creo que es porque después de mi iniciación del código, Yii llama a la función hide del modal, borrando así mis variables de iniciación.
Descubrí que poner la llamada removeData inmediatamente antes del código que lanzó el modal hizo el truco. Entonces mi código está estructurado así ...
fuente
En Bootstrap 3.2.0 el evento "on" debe estar en el documento y debe vaciar el modal:
En Bootstrap 3.1.0 el evento "on" puede estar en el cuerpo:
fuente
¿Por qué no hacerlo más general con BS 3? Simplemente use "[algo] modal" como la ID del DIV modal.
fuente
La única opción de trabajo para mí es:
Uso Bootstrap 3 y tengo una función llamada
popup('popup content')
que agrega el cuadro modal html.fuente
Agregar un $ (this) .html (''); para borrar datos visibles también, y funciona bastante bien
fuente
Si se proporciona una URL remota, el contenido se cargará una vez mediante el método de carga de jQuery y se inyectará en el div .modal-content. Si está utilizando la API de datos, también puede utilizar el atributo href para especificar la fuente remota. Un ejemplo de esto se muestra a continuación.
fuente
He agregado algo como esto, porque el contenido anterior se muestra hasta que aparece el nuevo, con .html ('') dentro del contenido .modal borrará el HTML dentro, espero que ayude
fuente
Escribí un fragmento simple manejando la actualización del modal. Básicamente, almacena el enlace en el que se hizo clic en los datos modales y verifica si es el mismo enlace en el que se ha hecho clic, eliminando o no los datos modales.
fuente
Para Bootstrap 3, en modal.js cambié:
a
(espacio adicional agregado para mayor claridad)
Esto evita cualquier destello no deseado de contenido modal antiguo llamando a empty () en el contenedor modal y eliminando los datos.
fuente
Esta funciona para mí.
fuente
Este otro enfoque funciona bien para mí:
fuente
Qué elemento html desea vaciar (div, span lo que sea).
fuente
Esta funciona para mí:
modal
guión
área de enlaces es el área donde pongo los datos y necesito borrar
fuente
Versión ampliada de la respuesta aceptada por @merv. También verifica si el modo oculto se carga desde la fuente remota y borra el contenido antiguo para evitar que parpadee.
https://gist.github.com/WojtekKruszewski/ae86d7fb59879715ae1e6dd623f743c5
fuente
Probado en Bootstrap versión 3.3.2
fuente
.removeData()
sin parámetros le dirá a jquery que elimine todos los datos adjuntos a ese elemento. En lo que respecta al problema del OP,.removeData('bs.modal')
o.removeData('modal')
sería suficiente y es muy seguro.Buena suerte con este:
fuente