930 votes

Comment ouvrir une fenêtre modale Bootstrap à l'aide de jQuery ?

J'utilise la fonctionnalité de fenêtre modale de Twitter Bootstrap. Lorsque quelqu'un clique sur "submit" dans mon formulaire, je veux afficher la fenêtre modale en cliquant sur le "bouton submit" dans le formulaire.

<form id="myform" class="form-wizard">
    <h2 class="form-wizard-heading">BootStap Wizard Form</h2>
    <input type="text" value=""/>
    <input type="submit"/>
</form>

<!-- Modal -->
<div id="myModal" class="modal hide fade" 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">Modal header</h3>
    </div>
    <div class="modal-body">
        <p>One fine body…</p>
    </div>
    <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
        <button class="btn btn-primary">Save changes</button>
    </div>
</div>

jQuery :

$('#myform').on('submit', function(ev) {
    $('#my-modal').modal({
        show: 'false'
    }); 

    var data = $(this).serializeObject();
    json_data = JSON.stringify(data);
    $("#results").text(json_data); 
    $(".modal-body").text(json_data); 

    // $("#results").text(data);

    ev.preventDefault();
});

0 votes

Vous avez une faute de frappe dans votre option d'affichage. Elle prend un booléen, donc ne mettez pas de guillemets à 'false' - $('#my-modal').modal({show : false}) ;

1696voto

Chase Points 7329

Bootstrap dispose de quelques fonctions qui peuvent être appelées manuellement sur les modales :

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

Vous pouvez en voir plus ici : Composant modal Bootstrap

Plus précisément, le section des méthodes .

Il faudrait donc que vous changiez :

$('#my-modal').modal({
    show: 'false'
}); 

à :

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

Si vous souhaitez créer votre propre fenêtre contextuelle personnalisée, voici une suggestion de vidéo d'un autre membre de la communauté :

https://www.youtube.com/watch?v=zK4nXa84Km4

6 votes

Je ne sais pas pourquoi cela ne fonctionne pas dans mon cas. J'ai le même code de démonstration dans ma page, et j'ai codé le bouton d'envoi comme ci-dessus. Cependant, lorsque je clique sur le bouton d'envoi, la fenêtre modale clignote rapidement et disparaît. Je dois cliquer sur le bouton "retour" du navigateur pour revenir à la page.

7 votes

J'ai trouvé la réponse ici à mon commentaire ci-dessus. Lien dupliqué vers bootrap.js sur les pages du site.

1 votes

Uncaught TypeError : $(...).modal is not a function, C'est probablement moi mais une idée de la raison pour laquelle j'obtiens cette erreur ? (j'ai jQuery)

105voto

Peter verleg Points 1320

Le plus souvent, lorsque $('#myModal').modal('show'); ne fonctionne pas, cela est dû au fait que vous avez inclus jQuery deux fois. Inclure jQuery 2 fois fait que les modales ne fonctionnent pas.

Supprimez l'un des liens pour que cela fonctionne à nouveau.

En outre, certains plugins provoquent également des erreurs, dans ce cas, ajoutez

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

3 votes

DataTables, avec sa version jQuery préemballée, m'a causé ceci

3 votes

Merci beaucoup. J'ai le même problème : modal n'est pas une fonction. Mais après avoir ajouté jQuery.noConflict(), cela fonctionne.

1 votes

Il convient de noter que cette solution de contournement ne doit être utilisée que si vous ne pouvez pas résoudre la cause première (c'est-à-dire inclure jQuery une seule fois). Si un plugin tiers l'inclut, recherchez la version non incluse ou contactez le tiers pour en créer une.

98voto

Gandarez Points 557

En outre, vous pouvez utiliser l'attribut de données

<button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button>

Dans ce cas particulier, vous n'avez pas besoin d'écrire du javascript.

Vous pouvez en voir plus ici : http://getbootstrap.com/2.3.2/javascript.html#modals

10 votes

Pour clarifier : "ne pas avoir besoin d'utiliser javascript" signifie "ne pas avoir besoin d'écrire javascript", javascript est toujours utilisé. J'ai essayé d'éditer la réponse mais elle a été rejetée car elle n'était pas "plus précise". Si vous essayez le code ci-dessus avec javascript désactivé, il ne fonctionnera pas. Pour moi, cela signifie que vous utilisez bien javascript.

24voto

raBne Points 1564

Il suffit d'appeler la méthode modale (sans passer aucun paramètre) en utilisant jQuery sélecteur.

Voici un exemple :

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

1 votes

Comment puis-je passer plus de paramètres à ma modale ? Par exemple, un ID spécifique (dynamique) ?

1 votes

Comment faire pour que votre ID soit dynamique ? Si oui, vous pouvez utiliser la fonctionnalité $(this) de jQuery pour sélectionner l'objet courant et lui passer des paramètres.

0 votes

Il semble que show est le paramètre par défaut de modal() mais je ne le trouve pas aquí

18voto

saneryee Points 91

Si vous utilisez la fonction onclick des liens pour appeler une modale par jQuery, le "href" ne peut pas être nul.

Par exemple :

... ...
<a href="" onclick="openModal()">Open a Modal by jQuery</a>
... ...
... ...
<script type="text/javascript">

function openModal(){

    $('#myModal').modal();
}       
</script>

La modale ne peut pas s'afficher. Le bon code est :

<a href="#" onclick="openModal()">Open a Modal by jQuery</a>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X