817 votes

Comment créer un dialogue avec des options "oui" et "non" ?

Je vais créer un bouton pour effectuer une action et enregistrer les données dans une base de données.

Lorsque l'utilisateur clique sur le bouton, je veux qu'une alerte JavaScript propose les options "oui" et "annuler". Si l'utilisateur sélectionne "oui", les données seront insérées dans la base de données, sinon aucune action ne sera entreprise.

Comment afficher un tel dialogue ?

1527voto

Sidnicious Points 15187

Vous recherchez probablement confirm() qui affiche une invite et renvoie true ou false en fonction de ce que l'utilisateur a décidé :

if (confirm('Are you sure you want to save this thing into the database?')) {
  // Save it!
  console.log('Thing was saved to the database.');
} else {
  // Do nothing!
  console.log('Thing was not saved to the database.');
}

161 votes

Confirme a des boutons OK et CANCEL. Ces boutons peuvent-ils être réglés sur OUI/NON ?

21 votes

@Owen Non. La spécification dit que vous devez juste fournir un message. Vous pouvez émuler un dialogue en HTML (mais il ne se bloquera pas comme le dialogue intégré). Dialogue jQuery est un bon exemple de mise en œuvre de ce genre de choses.

4 votes

Note : vous pouvez mettre un return à l'intérieur du else et ainsi vous n'avez pas besoin d'envelopper tout votre code dans le confirm ! (à régler au cas par cas cependant)

131voto

Chuck Norris Points 8240
var answer = window.confirm("Save data?");
if (answer) {
    //some code
}
else {
    //some code
}

Utilisez window.confirm au lieu de l'alerte. C'est le moyen le plus simple d'obtenir cette fonctionnalité.

21 votes

Vous pouvez également opter pour if(confirm("...")){ au lieu de

89voto

dana Points 4890

Comment le faire en utilisant le JavaScript "en ligne" :

<form action="http://www.google.com/search">
  <input type="text" name="q" />
  <input type="submit" value="Go"
    onclick="return confirm('Are you sure you want to search Google?')"
  />
</form>

9 votes

Il est préférable de gérer l'événement onsubmit du formulaire : avec votre code, si l'utilisateur appuie sur entrée dans le texte, le formulaire est soumis sans aucune demande !

1 votes

@p91paul - Dans quel navigateur cela échoue-t-il pour vous ? Je viens d'essayer d'appuyer sur la touche Entrée dans IE, Chrome et Safari sous Windows et cela a fonctionné comme prévu. jsfiddle.net/ALjge/1

1 votes

J'étais sûr de ce que je disais, mais je n'ai pas testé et je me suis trompé. désolé !

46voto

rybo111 Points 1318

Évitez le JavaScript en ligne - changer le comportement signifierait modifier chaque instance du code, et ce n'est pas joli !

Une méthode beaucoup plus propre consiste à utiliser un attribut de données sur l'élément, tel que data-confirm="Your message here" . Mon code ci-dessous prend en charge les actions suivantes, y compris les éléments générés dynamiquement :

  • a et button clics
  • form soumet
  • option sélectionne

jQuery :

$(document).on('click', ':not(form)[data-confirm]', function(e){
    if(!confirm($(this).data('confirm'))){
        e.stopImmediatePropagation();
        e.preventDefault();
    }
});

$(document).on('submit', 'form[data-confirm]', function(e){
    if(!confirm($(this).data('confirm'))){
        e.stopImmediatePropagation();
        e.preventDefault();
    }
});

$(document).on('input', 'select', function(e){
    var msg = $(this).children('option:selected').data('confirm');
    if(msg != undefined && !confirm(msg)){
        $(this)[0].selectedIndex = 0;
    }
});

HTML :

<!-- hyperlink example -->
<a href="http://www.example.com" data-confirm="Are you sure you want to load this URL?">Anchor</a>

<!-- button example -->
<button type="button" data-confirm="Are you sure you want to click the button?">Button</button>

<!-- form example -->
<form action="http://www.example.com" data-confirm="Are you sure you want to submit the form?">
    <button type="submit">Submit</button>
</form>

<!-- select option example -->
<select>
    <option>Select an option:</option>
    <option data-confirm="Are you want to select this option?">Here</option>
</select>

Démonstration de JSFiddle

2 votes

Solution très propre à laquelle je n'avais pas pensé auparavant. Elle peut cependant être encore plus concise : $("[data-confirm]").on('click,submit', function() { /* ... */ })

1 votes

Désolé, je n'ai pas pu résister à l'envie d'y jeter un nouveau coup d'œil. Premièrement : les événements doivent être séparés par un espace. Deuxièmement : vous pouvez toujours resserrer le code jsfiddle.net/jguEg ;)

0 votes

@GrimaceofDespair J'ai mis à jour le code, car le fait de cliquer et de confirmer un type="button" demande ensuite si l'utilisateur veut soumettre le formulaire (parce que vous cliquez sur un élément de formulaire), ce qui ne se produit évidemment pas après avoir cliqué à nouveau sur OK.

9voto

NoProblemBabe Points 991

Vous pouvez intercepter le onSubmit l'événement esting JS. Ensuite, appelez une alerte de confirmation, puis récupérez le résultat.

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