Bonjour

J'essaie de remplacer les confirm() par une solution jquery Vex Site de Vex.

En gros je veux remplacer

if (!confirm('Do you really want to delete this post ?')) {
    e.preventDefault();
}

par

vex.dialog.confirm({
    message: 'Do you really want to delete this post ?',
        callback: function(value) {
            if (value === false) {
                e.preventDefault();
            }
        }
});

Le soucis est que la fenêtre est affichée et aussitôt refermée et le script continue comme si on avait appuyé sur le bouton OK (donc comme si l'affichage de la confirm-box n'avait pas eu lieu)

Merci de votre aide

4 réponses


Je suppose que tu as mis ton code directement entre les balise <script>.
Tu dois déclencher l'ouverture de ton dialog sur une action de l'utilisateur.

Par exemple (Sur un clic sur un bouton):

$('#ton-bouton-delete').click(function(e){
    vex.dialog.confirm({
        message: 'Do you really want to delete this post ?',
    callback: function(value) {
        if (value === false) {
            e.preventDefault();
        }
    }
    });
});

Bien sur que j'ai mis ce qui faut c'est juste que ce n'est pas la partie intéressante du script donc je ne l'ai pas reproduis :)

Comme je précise je cherche à remplacer la méthode javascript classique qui marche bien par ce plugin mais je cherche juste à comprendre pourquoi le script continue de s'éxecuter alors que la modal box est ouverte.

Je précise que j'ai testé avec d'autres plugins jquery et que j'ai toujours ce soucis.

En attendant de trouver mieux j'ai pris le problème à l'envers : je mets mon preventDefault() en premier et je "redirige" si l'utilisateur clique sur OK

$(document).on('click', '.btn-delete', function(e) {
        e.preventDefault();
        var url = $(this).attr('href');
        vex.dialog.buttons.YES.text = 'Delete the post';
        vex.dialog.confirm({
            className: 'vex-theme-flat-attack',
            message: 'Do you really want to delete this post ?',
            callback: function(value) {
                if (value === true) {
                    window.location = url;
                }
            }
        });
    });

Mais que c'est laid et que je n'aime pas cette solution, donc je suis toujours preneur d'une vraie solution et propre :)

Merci

Bonjour,

le confirm natif de javascript bloque l'exécution en attendant la réponse de l'utilisateur.
Les différents plugin que tu peux utiliser ne feront que simuler cette situation.
une popup s'ouvre avec des boutons, chacun déclenchant des callbacks lorsque l'on clique.
Ta solution n'est pas sale, elle est normale. Tu ne peux pas bloquer l'exécution du script, le traitement doit donc être fait en amont de l'affichage de la popup pour couper le fonctionnement "normal" du bouton.
Le traitement du choix de l'utilisateur dans la popup style confirm a lieu en callback .

C'est un fonctionnement classique.

Bonjour,

Merci de ta réponse au moins c'est clair net et précis :)
Vu qu'il n'existe pas (ou que je n'ai pas trouvé) de fonction inverse à preventDefault() je vais devoir garder ce code