Question


Au point, je veux passer outre la fonction standard js confirm() dans un plugin jQuery. Je l'ai compris comment le faire avec la mise en page simple fonction ci-dessous.

function confirm(opts) {
   //code
}

Maintenant, ce que je veux faire est d'appeler une autre fonction au sein de la fonction confirm ci-dessus, comme si ...

function confirm(opts) {
   openModal(opts);
}

La fonction openModal ouvrira une fenêtre modale personnalisé avec le message et les boutons nécessaires. Les boutons sont à la fois <span> avec le id soit submit ou cancel. submit retourne vrai et retourne cancel faux. Mais maintenant, comment puis-je retourner soit vrai ou faux sur la base du bouton cliqué?

Par exemple ...

$('#openModal').live('click', function() {
   var opts = { title:'Modal Title', message:'This is a modal!' };
   var resp = confirm(opts);
   if(resp) 
      // user clicked <span id="submit"></span>
   else 
      // user clicked <span id="cancel"></span>
});

Si tout va bien vous comprenez ce que je veux dire.

Était-ce utile?

La solution

est possible, mais pas exactement comme vous le décrivez. La façon typique de la fonction de confirmation est utilisé est:

if(confirm("Are you sure you want to submit this form?")) {
    form.submit();
}

Dans l'exemple ci-dessus, la presse bouton est renvoyé de manière synchrone au script. L'exécution est suspendue dans la fonction jusqu'à ce qu'un bouton.

Une « boîte de dialogue modale » est juste une superposition sur le contenu d'une page Web HTML. Pour le navigateur, boutons dans un tel travail de superposition de la même façon que les boutons partout ailleurs dans cette page font.

Depuis JavaScript gère de manière asynchrone les clics de bouton (à savoir l'utilisation des fonctions de rappel pour gérer les événements) plutôt que de manière synchrone, l'approche que vous tentez ne fonctionnera pas.

Vous auriez besoin de changer toutes les parties du code qui utilisent la fonction de confirmation pour ressembler à ceci:

confirm("Are you sure you want to submit this form?", function(result) {
    if(result) {
        form.submit();
    }
});

Ceci fonctionnerait comme l'enregistrement d'un gestionnaire d'événements avec jQuery lui-même fait. L'exécution du script se poursuit immédiatement, sauter passé tout le code dans la fonction anonyme. Plus tard, le navigateur appellera cette fonction indirectement par l'intermédiaire d'un gestionnaire d'événements JavaScript que vous inscrivez dans la fonction de confirmation, son but d'appeler la fonction de rappel avec soit true ou false selon le cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top