Comment déclencher un modal Bootstrap par programmation?

204

Si je vais ici

http://getbootstrap.com/2.3.2/javascript.html#modals

Et cliquez sur «Lancer la démo modale», cela fait la chose attendue. J'utilise le modal dans le cadre de mon processus d'inscription et une validation côté serveur est impliquée. S'il y a des problèmes, je veux rediriger l'utilisateur vers le même modal avec mes messages de validation affichés. Pour le moment, je ne peux pas comprendre comment obtenir le modal à afficher autre qu'un clic physique de l'utilisateur. Comment puis-je lancer le modèle par programme?

Hoa
la source

Réponses:

365

Pour afficher manuellement le pop-up modal, vous devez le faire

$('#myModal').modal('show');

Vous devez auparavant l'initialiser avec show: falsepour qu'il ne s'affiche pas tant que vous ne l'avez pas fait manuellement.

$('#myModal').modal({ show: false})

myModalest l'id du conteneur modal.

Claudio Redi
la source
Merci. Cela a fonctionné. Une observation cependant est que, lorsque j'ouvre la boîte modale, cela réinitialise le défilement et si j'ai déclenché la boîte modale du bas de la page, la page défile vers le haut. Comment dois-je arrêter ça?
divinedragon
@tdubs: bizarre, ça devrait marcher. Voir le dernier code modal github.com/twitter/bootstrap/blob/master/js/bootstrap-modal.js . Jusqu'à présent, je vois, cela devrait encore fonctionner
Claudio Redi
1
@ClaudioRedi, j'ai essayé les deux dans la console, je trouve qu'un seul fonctionne avec du chrome. $ ('# myModal'). modal ({show: false}) ne fonctionne pas mais $ ('# myModal'). modal ('hide') fonctionne. Je ne sais pas pourquoi
Tyrone Wilson
1
Existe-t-il un moyen de passer une valeur ou un paramètre personnalisé comme option comme $ ('# myModel'). Model ({data: 1, show: false})
Anup Sharma
4
@divinedragon vieillit plus tard, je sais, mais le problème avec le défilement vers le haut de la page est probablement dû au déclenchement de la fenêtre contextuelle avec une balise comme '<a href='#'>et à l'échec vers return falseou preventDefaultà l'intérieur du gestionnaire. Le navigateur fait comme indiqué et fait défiler jusqu'à l'ancre par défaut - le haut de la page. J'ai eu cette morsure plusieurs fois car notre CSS repose parfois sur un hrefensemble pour que le style corresponde.
brichins
54

Vous ne devez pas écrire data-toggle = "modal" dans l'élément qui a déclenché le modal (comme un bouton), et vous pouvez afficher manuellement le modal avec:

$('#myModal').modal('show');

et cachez avec:

$('#myModal').modal('hide');
nandop
la source
J'ai une URL qui ouvre le modal avec basculement de données. Ensuite, à l'intérieur du modal, j'ai un bouton qui appelle une fonction dont la dernière chose qu'il fait est de fermer le modal en utilisant la méthode de masquage que vous proposez. Génial!
JayJay
17

Si vous recherchez une création modale programmatique, vous aimerez peut-être ceci:

http://nakupanda.github.io/bootstrap3-dialog/

Même si le modal de Bootstrap fournit un moyen javascript pour la création modale, vous devez toujours écrire les balises html de modal en premier.

nakupanda
la source
13

HTML

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary btn-lg">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title" id="myModalLabel">Modal title</h4>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

JS

$('button').click(function(){
$('#myModal').modal('show');
});

DEMO JSFIDDLE

tvshajeer
la source
9

vous pouvez afficher le modèle via jquery (javascript)

$('#yourModalID').modal({
  show: true
})

Démo: ici

ou vous pouvez simplement supprimer la classe "cacher"

<div class="modal" id="yourModalID">
  # modal content
</div>

La

HaNdTriX
la source
4

Je voulais faire ça angular (2/4)comme ça, voici ce que j'ai fait:

<div [class.show]="visible" [class.in]="visible" class="modal fade" id="confirm-dialog-modal" role="dialog">
..
</div>`

Choses importantes à noter :

  • visible est une variable (booléenne) dans le composant qui régit la visibilité du modal.
  • showet insont des classes bootstrap.

Un exemple de composant & html

Composant

@ViewChild('rsvpModal', { static: false }) rsvpModal: ElementRef;
..
@HostListener('document:keydown.escape', ['$event'])
  onEscapeKey(event: KeyboardEvent) {
    this.hideRsvpModal();
  }
..
  hideRsvpModal(event?: Event) {
    if (!event || (event.target as Element).classList.contains('modal')) {
      this.renderer.setStyle(this.rsvpModal.nativeElement, 'display', 'none');
      this.renderer.removeClass(this.rsvpModal.nativeElement, 'show');
      this.renderer.addClass(document.body, 'modal-open');
    }
  }
  showRsvpModal() {
    this.renderer.setStyle(this.rsvpModal.nativeElement, 'display', 'block');
    this.renderer.addClass(this.rsvpModal.nativeElement, 'show');
    this.renderer.removeClass(document.body, 'modal-open');
  }

Html

<!--S:RSVP-->
<div class="modal fade" #rsvpModal role="dialog" aria-labelledby="niviteRsvpModalTitle" (click)="hideRsvpModal($event)">
    <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="niviteRsvpModalTitle">

                </h5>
                <button type="button" class="close" (click)="hideRsvpModal()" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">

            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary bg-white text-dark"
                    (click)="hideRsvpModal()">Close</button>
            </div>
        </div>
    </div>
</div>
<!--E:RSVP-->
Anand Rockzz
la source
2

Le code suivant utile pour ouvrir modal sur la fonction openModal () et fermer sur closeModal ():

      function openModal() {
          $(document).ready(function(){
             $("#myModal").modal();
          });
      }

     function closeModal () {
          $(document).ready(function(){
             $("#myModal").modal('hide');
          });  
      }

/ * #myModal est l'id du popup modal * /

rohit parte
la source
1
Veuillez expliquer ce que fait le code lors de la publication des réponses.
Artemis ne fait toujours pas confiance au SE