J'utilise Twitter bootstrap, j'ai spécifié 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>
Et les liens
<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>
Lorsque je clique sur l'un de ces liens pour la première fois, je vois le contenu correct, mais lorsque je clique sur d'autres liens, il affiche le même contenu chargé pour la première fois, il ne met pas à jour le contenu.
Je veux qu'il soit mis à jour à chaque fois que vous cliquez dessus.
PS: Je peux facilement le faire fonctionner via la fonction jQuery personnalisée, mais je veux savoir si c'est possible avec la fonction distante modale Bootstrap native, car cela devrait être assez facile et je suppose que je ne fais que compliquer les choses.
jquery
jquery-plugins
twitter-bootstrap
modal-dialog
Dhruv Kumar Jha
la source
la source
remote
modaux sont obsolètes à partir de Bootstrap v3.2.1 et seront supprimés dans la v4.Réponses:
Le problème est double.
Tout d'abord , une fois qu'un objet Modal est instancié, il est attaché de manière persistante à l'élément spécifié par
data-target
les appels suivants pour montrer que le modal ne fera appeltoggle()
qu'à lui, mais ne mettra pas à jour les valeurs dans leoptions
. Ainsi, même si leshref
attributs sont différents sur vos différents liens, lorsque le modal est basculé, la valeur deremote
n'est pas mise à jour. Pour la plupart des options, on peut contourner cela en modifiant directement l'objet. Par exemple:Cependant, cela ne fonctionnera pas dans ce cas, car ...
Deuxièmement , le plugin Modal est conçu pour charger la ressource distante dans le constructeur de l'objet Modal, ce qui signifie malheureusement que même si une modification est apportée à la
options.remote
, elle ne sera jamais rechargée .Un remède simple consiste à détruire l'objet Modal avant de basculer ultérieurement. Une option consiste à simplement le détruire une fois qu'il se cache:
Remarque: ajustez les sélecteurs selon vos besoins. C'est le plus général.
Plunker
Ou vous pouvez essayer de trouver un schéma plus compliqué pour faire quelque chose comme vérifier si le lien qui lance le modal est différent du précédent. Si c'est le cas, détruisez; sinon, pas besoin de recharger.
la source
hide
classe sur le modal, donc si votre fenêtre était trop petite, le modal peut avoir bloqué les événements de la souris sur les boutons. Pour une raison quelconque, JSFiddle.net est vraiment mauvais ce matin (un 504 a essayé de se mettre à jour), donc je viens de refaire l'exemple sur plnkr.co, ce qui est mieux pour AJAX de toute façon.bs.modal
en a$(this).removeData('bs.modal')
travaillé pour moi avec Bootstrap 3$('body').on('hidden.bs.modal', '.modal', function () { $(this).removeData('bs.modal'); });
var modalData = $(this).data('bs.modal'); if (modalData && modalData.options.remote)...
Pour bootstrap 3, vous devez utiliser:
la source
remoteData
ligne:$(this).empty()
$(this).empty()
. L'remote
option charge les données distantes dans l'<div class="modal-content">
élément imbriqué . Utilisez$('.modal-content', this).empty();
plutôt.Pour Bootstrap 3.1, vous souhaiterez supprimer des données et vider la
modal-content
plutôt que la boîte de dialogue entière (3.0) pour éviter le scintillement en attendant le chargement du contenu distant.Si vous utilisez des modaux non distants, le code ci-dessus supprimera bien sûr leur contenu une fois fermé (mauvais). Vous devrez peut-être ajouter quelque chose à ces modaux (comme une
.local-modal
classe) afin qu'ils ne soient pas affectés. Modifiez ensuite le code ci-dessus pour:la source
$(e.target).removeData("bs.modal").find(".modal-content").empty();
c'est comme si mon modal était en quelque sorte caché et seule la superposition grise apparaît.Merci merv. J'ai commencé à bricoler boostrap.js mais votre réponse est une solution de contournement rapide et propre. Voici ce que j'ai fini par utiliser dans mon code.
la source
La réponse acceptée n'a pas fonctionné pour moi, alors je suis allé avec JavaScript pour le faire.
la source
Cela fonctionne avec Bootstrap 3 FYI
la source
Mon projet est construit en Yii et utilise le plugin Bootstrap-Yii, donc cette réponse n'est pertinente que si vous utilisez Yii.
Le correctif ci-dessus a fonctionné mais seulement après la première fois que le modal a été affiché. La première fois, il est venu vide. Je pense que c'est parce qu'après mon initiation du code, Yii appelle la fonction de masquage du modal, effaçant ainsi mes variables d'initiation.
J'ai trouvé que placer l'appel removeData juste avant le code qui a lancé le modal a fait l'affaire. Donc mon code est structuré comme ça ...
la source
Dans Bootstrap 3.2.0, l'événement "on" doit être sur le document et vous devez vider le modal:
Dans Bootstrap 3.1.0, l'événement "on" peut être sur le corps:
la source
Pourquoi ne pas le rendre plus général avec BS 3? Utilisez simplement "[quelque chose] modal" comme ID du DIV modal.
la source
La seule option de travail pour moi est:
J'utilise Bootstrap 3 et j'ai une fonction appelée
popup('popup content')
qui ajoute la boîte modale html.la source
Ajout d'un $ (this) .html (''); pour effacer également les données visibles, et cela fonctionne très bien
la source
Si une URL distante est fournie, le contenu sera chargé une fois via la méthode de chargement de jQuery et injecté dans la div .modal-content. Si vous utilisez l'api de données, vous pouvez également utiliser l'attribut href pour spécifier la source distante. Un exemple de ceci est illustré ci-dessous
la source
J'ai ajouté quelque chose comme ça, car l'ancien contenu est affiché jusqu'à ce que le nouveau apparaisse, avec .html ('') à l'intérieur du contenu .modal effacera le HTML à l'intérieur, j'espère que cela aide
la source
J'ai écrit un simple extrait traitant de l'actualisation du modal. Fondamentalement, il stocke le lien cliqué dans les données du modal et vérifie s'il s'agit du même lien cliqué, supprimant ou non les données modales.
la source
Pour Bootstrap 3, dans modal.js j'ai changé:
à
(espacement supplémentaire ajouté pour plus de clarté)
Cela empêche tout flash indésirable de l'ancien contenu modal en appelant empty () sur le conteneur modal ainsi qu'en supprimant les données.
la source
Celui-ci fonctionne pour moi.
la source
Cette autre approche fonctionne bien pour moi:
la source
Quel élément html que vous souhaitez vider (div, span, etc.).
la source
Celui-ci fonctionne pour moi:
modal
scénario
liens-zone est la zone où je mets les données et besoin d'effacer
la source
Version étendue de la réponse acceptée par @merv. Il vérifie également si le modal caché est chargé à partir d'une source distante et efface l'ancien contenu pour l'empêcher de clignoter.
https://gist.github.com/WojtekKruszewski/ae86d7fb59879715ae1e6dd623f743c5
la source
Testé sur Bootstrap version 3.3.2
la source
.removeData()
sans paramètres indiquera à jquery de supprimer toutes les données attachées à cet élément. En ce qui concerne le problème du PO,.removeData('bs.modal')
ou.removeData('modal')
pourrait suffire et est très sûr.Bonne chance avec celui-ci:
la source