Je travaille sur un site web en utilisant bootstrap.
En gros, je voulais utiliser un modal dans la page d'accueil, appelé par le bouton de l'unité Hero.
Code du bouton:
<button type="button"
class="btn btn-warning btn-large"
data-toggle="modal"
data-target="#myModal">Open Modal</button>
Code modal:
<div class="modal hide fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">In Costruzione</h3>
</div>
<div class="modal-body">
<p>Test Modal: Bootstrap</p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Chiudi</button>
<button class="btn btn-warning">Salva</button>
</div>
</div>
Le problème est que dès que je clique sur le bouton, le modal s’installe puis disparaît immédiatement.
J'apprécierais toute aide.
Aussi, comment changer la couleur du triangle déroulant (pointant vers le haut, pas de survol)? Je travaille sur un site Web basé sur l'orange et le marron et ce truc bleu est vraiment ennuyant.
C'est un comportement typique lorsque le code JavaScript du plug-in Modal est chargé deux fois. Assurez-vous que le plug-in ne soit pas chargé deux fois. Selon la plate-forme que vous utilisez, le code modal peut être chargé à partir d'un nombre de sources. Certains des plus communs sont:
require('bootstrap')
Un bon point de départ est d'inspecter les écouteurs d'événements click
enregistrés à l'aide des outils de développement de votre navigateur. Chrome, par exemple, répertoriera le fichier source JS où se trouve le code permettant d’enregistrer le programme d’écoute. Une autre option consiste à rechercher dans les sources de la page une phrase trouvée dans le code modal, par exemple, var Modal
.
Malheureusement, ils ne trouveront pas toujours des choses dans tous les cas. L'inspection des demandes de réseau peut être un peu plus robuste pour vous donner une image de tout ce qui est chargé sur une page.
Voici une démonstration de ce qui se passe lorsque vous chargez les fichiers bootstrap.js et bootstrap-modal.js (juste pour confirmer votre expérience):
Si vous faites défiler la source vers le bas de la page, vous pouvez supprimer ou commenter la ligne <script>
pour le fichier bootstrap-modal.js, puis vérifier que le modal fonctionnera comme prévu.
J'ai eu le même problème, mais la cause était différente. J'ai suivi la documentation et créé un bouton comme suit:
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
Launch demo modal
</button>
Lorsque j'ai cliqué dessus, il est apparu que rien ne se passerait. Cependant, le bouton se trouvait dans un <form>
qui récupérait temporairement la même page.
J'ai résolu ce problème en ajoutant type="button"
à l'élément button, de sorte qu'il ne soumette pas le formulaire lorsque l'utilisateur clique dessus.
Pour moi, ce qui a fonctionné était de supprimer
data-toggle="modal"
du bouton. Le bouton lui-même peut être n'importe quel élément - un lien, un div, un bouton, etc.
J'ai cherché pendant un moment une référence d'amorçage en double dans mon application mvc, après les autres réponses utiles à cette question.
Je l'ai enfin trouvé - il était inclus dans une autre bibliothèque que j'utilisais, alors ce n'était pas évident du tout! (datatables.net
).
Si vous rencontrez toujours ce problème, recherchez d'autres bibliothèques susceptibles d'inclure Bootstrap pour vous. (datatables.net
vous permet de spécifier un téléchargement avec ou sans bootstrap - les autres font de même).
J'ai donc supprimé le bootstrap.min.js
de mon bundle.config
et tout a bien fonctionné.
Même symptôme, dans le contexte d'une application Rails avec Bootstrap fourni par la gemme bootstrap-sass
et la réponse de @ merv me mettent sur la bonne voie.
Mon fichier application.js
avait les éléments suivants:
//= require bootstrap
//= require bootstrap-sprockets
Le correctif consistait à supprimer l'une des deux lignes. En effet, le fichier readme de la gemme vous avertit de cette erreur. Ma faute.
Mon code avait en quelque sorte le fichier bootstrap.min.js inclus deux fois J'ai enlevé l'un d'eux et tout fonctionne bien maintenant.
e.preventDefault();
avec jquery ui
Pour moi, ce problème est survenu avec le remplacement de la méthode click sur un bouton jquery ui, provoquant un rechargement de page par clic.
Le problème peut également se produire si vous utilisez jquery si vous associez deux fois un écouteur d'événement . Par exemple, vous définissez sans dissocier:
$("body").on("click","#fixerror",function(event){
$("#fixerrormodal").modal('toggle')
})
Si cela se produit, l'événement est déclenché deux fois de suite et le modal disparaît.
$("body").on("click","#fixerror",function(event){
$("#fixerrormodal").modal()
$("#fixerrormodal").modal('toggle')
})
Voir exemple: http://embed.plnkr.co/i5xB1WbX7zgXrbDMhNAW/preview
J'ai rencontré le même symptôme que @gpasse a montré dans son exemple. Voici mon code ...
<form...>
<!-- various inputs with form submit --->
<!-- button opens modal to show dynamic info -->
<button id="myButton" class="btn btn-primary">Show Modal</button>
</form>
<div id="myModal" class="modal fade" ...>
</div>
<script>
$( '#myButton' ).click( function() {
$( '#myModal' ).modal();
)};
</script>
Comme @Bhargav l'a suggéré, mon problème était dû au bouton qui tentait de soumettre le formulaire et de recharger la page. J'ai changé le bouton pour un lien <a>
comme suit:
<a href="#" id="myButton" class="btn btn-primary">Show Modal</a>
... et cela a résolu le problème.
NOTE: Je n'ai pas assez de réputation pour simplement ajouter un commentaire ou un vote positif pour le moment, et j’ai pensé que je pourrais ajouter un peu de précision.
Je suis tombé sur ce problème moi-même aujourd'hui et il s'est avéré que ce n'était que dans Chrome. Ce qui m'a fait comprendre que cela pourrait être un problème de rendu… .. Le déplacement du modal spécifique vers son propre calque de rendu l'a résolu.
#myModal {
-webkit-transform: translate3d(0, 0, 0);
}
Moi aussi j'ai eu le même problème, mais pour moi, c'était parce que j'avais un bouton de type "submit" dans le formulaire modal. j'ai changé
<input type='submit' name='submitname' id="partyBtn" value='Submit' title='Click to submit.'/>
à
<input type='button' name='submitname' id="partyBtn" value='Submit' title='Click to submit.'/>
Et cela a réglé le problème de la disparition.
Dans mon cas, je n'avais qu'un seul fichier bootstrap.js, jquery.js inclus, mais j'avais toujours ce type d'erreur et mon code pour le bouton ressemblait à ceci:
<script type="text/javascript">
$(document).ready(function(){
$("#bttn_<?php echo $rnt['id'];?>").click(function(){
$("#myModal_<?php echo $rnt['id'];?>").modal('show');
});
});
</script>
J'ai simplement ajouté e.preventDefault (); à cela et cela a fonctionné comme un charme.
Donc, mon nouveau code était comme ci-dessous:
<script type="text/javascript">
$(document).ready(function(){
e.preventDefault();
$("#bttn_<?php echo $rnt['id'];?>").click(function(){
$("#myModal_<?php echo $rnt['id'];?>").modal('show');
});
});
</script>
Dans mon cas, un clic sur un bouton provoque un rechargement (non voulu) de la page.
Voici ma solution:
<button class="btn btn-success" onclick="javascript: return false;"
data-target="#modalID" data-toggle="modal">deaktivieren</button>
Dans mon cas, j’ai utilisé le bouton actionlink
dans MVC et, face à ce problème, j’ai essayé de nombreuses solutions ci-dessus et d’autres, mais toujours face à ce problème, je me suis rendu compte de mon erreur de code.
J'ai appelé modal en javascript en utilisant
$('#ModalId').modal('show');
Avant l'erreur, j'utilise ce bouton
<a href="" onclick="return Edit();" class="btn btn-primary">Edit</a>
Je n'ai aucune valeur pour la propriété href dans ce bouton, donc je suis confronté au problème.
Puis j'édite ce code de bouton comme ceci
<a href="#" onclick="return Edit();" class="btn btn-primary">Edit</a>
puis le problème se résout juste une erreur en raison de l'absence de # dans le premier.
voyez si cela vous aidera.
J'ai eu le même problème en travaillant sur un projet avec asp.NET. J'utilisais bootstrap 3.1.0 l'a résolu en rétrogradant à Bootstrap 2.3.2.
Je faisais face au même problème lors de tests sur des appareils mobiles et cette astuce a fonctionné pour moi
<a type="submit" class="btn btn-primary" data-toggle="modal" href="#myModal">Submit</a>
Modifiez le bouton pour ancrer la balise, cela devrait fonctionner, le problème vient de son bouton de type car il essaie de le soumettre, le modal disparaît immédiatement. <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
J'espère que cela fonctionnera pour vous.
Encore une autre cause/solution! J'ai eu dans mon code JS:
$("#show_survey").click(function() {
$("#survey_modal").modal("show")
})
Mais mon code HTML était déjà écrit comme:
<a class="small-text link" data-target="#survey_modal" data-toggle="modal" href="#" id="show_survey">Take a quick 7 question survey!</a>
C'est donc une autre permutation de la façon dont la duplication a saisi le code et a provoqué l'ouverture puis la fermeture du modal. Dans mon cas, data-target
et data-toggle
au format HTML conformément aux documents Bootstrap déclenchent déjà le fonctionnement du modal. Le code JS est donc redondant et, une fois supprimé, il fonctionne.
Dans mon cas, le CDN était inclus dans la tête d’application.html.erb et j’avais également installé la gemme 'jquery-Rails', que je devine grâce à la documentation et aux publications ci-dessus, est redondante.
J'ai simplement commenté le CDN (ci-dessous) de la tête de application.html.erb et le modal reste ouvert.
<!--<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>-->
Avez-vous essayé d'enlever
data-dismiss="modal"
au cas où quelqu'un utilisant codeigniter 3 booterait avec datatable.
ci-dessous est ma solution dans config/ci_boostrap.php
//'assets/dist/frontend/lib.min.js',
//lib.min.js has conflict with datatables.js and i removed it replace with jquery.js
'assets/dist/frontend/jquery-3.3.1.min.js',
'assets/dist/frontend/app.min.js',
'assets/dist/datatables.js'
Je sais que c'est vieux, mais voici une autre chose à vérifier - assurez-vous que vous n'avez qu'un seul attribut data-target =. Je l'avais dupliqué et le résultat était conforme à ce fil.
en travaillant avec Angular (5), je suis confronté au même problème, mais dans mon cas, j'ai résolu le problème suivant:
composant.html
<button type="button" class="btn btn-primary" data-target="#myModal"
(click)="showresult()">fff</button>
<div class="modal" id="myModal" role="dialog" tabindex="-1" data-backdrop="false">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p>Modal body text goes here.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary">Save changes</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
composant.ts
NOTE: il faut importer jquery dans le fichier ts en tant que "declare var $: any;"
showresult(){
debugger
$('#myModal').modal('show');
}
Les changements que j'ai faits:
suppression de "data-toggle =" modal "de la balise Button (grâce à @miCRoSCoPiC_eaRthLinG cette réponse m'aide ici). Dans mon cas, cela montre modal donc j'ai créé (click) =" showresult () "
inside composant.ts doit déclarer Jquery ($) et la méthode de clic sur le bouton interne showresult () appelle "$ ('# myModal'). modal ('show');"
Devait faire face au même problème. La raison est la même que le @merv
. Le problème était lié au composant calendar ajouté à la page. Le composant lui-même ajoute la fonctionnalité modale à utiliser dans la fenêtre contextuelle du calendrier.
Donc, les raisons de briser le modèle popup seront un ou plusieurs des suivants
J'ai eu le même problème aussi. Le problème avec moi était que je montrais le modal en appuyant sur un lien et en demandant confirmation avec jQuery.
Le code ci-dessous affiche le modal et qui disparaît immédiatement:
<a href="" onclick="do_some_stuff()">Hey</a>
J'ai fini par ajouter '#' à href pour que le lien n'aille nulle part et cela a résolu mon problème.
<a href="#" onclick="do_some_stuff()">Hey</a>
Moi aussi j'avais le problème, si le bouton est à l'intérieur d'un tag, le modal apparaît une fois et disparaît assez tôt, le bouton du formulaire est résolu. Merci j'ai fini dans ce fil! +1 à tous.
J'avais ajouté bootstrap
à mon projet via bower
, puis j'ai importé le fichier bootstrap.min.js
et après le fichier modal.js
. (Le bouton qui ouvre le modal est à l'intérieur d'un formulaire). Je supprime simplement l'importation pour modal.js
et cela fonctionne pour moi.