Lorsqu'un utilisateur clique sur un certain lien, j'aimerais lui présenter une boîte de dialogue de confirmation. S'il clique sur "Oui", j'aimerais poursuivre la navigation initiale. Un hic : mon dialogue de confirmation est mis en œuvre en renvoyant un objet jQuery.Deferred qui n'est résolu que si l'utilisateur clique sur le bouton "Oui". Le dialogue de confirmation est donc asynchrone.
En gros, je veux quelque chose comme ça :
$('a.my-link').click(function(e) {
e.preventDefault(); e.stopPropogation();
MyApp.confirm("Are you sure you want to navigate away?")
.done(function() {
//continue propogation of e
})
})
Bien sûr, je pourrais placer un drapeau et redéclencher le clic, mais c'est très compliqué. Y a-t-il un moyen naturel de faire cela ?
1 votes
Avez-vous essayé
$this.trigger(e);
( éditer qui aurait besoin d'un drapeau s'il fonctionnait) ou$this.parent().trigger(e)
(dans le callback), où$this
se réfère aux éléments cliqués ?0 votes
@FelixKling Cela ne fonctionnera pas car
e.preventDefault(); e.stopPropogation();
a envoyé des drapeaux sur e. S'il existait un moyen d'envoyer une copie de e à e2, je pourrais appeler quelque chose du genree.handler(e2)
ce qui, à mon avis, devrait fonctionner.0 votes
Je me suis dit que jQuery était peut-être assez intelligent pour réinitialiser les drapeaux lorsqu'ils sont transmis à
trigger
...0 votes
@FelixKling bon appel, mais je viens de vérifier le code - pas de chance.
0 votes
@FelixKling : Je viens d'essayer votre
.parent()
en utilisant l'objet événementiel d'origine, et cela semble fonctionner correctement. jsfiddle.net/vTzDM Je me demande pourquoi cela ne fonctionnait pas pour George.0 votes
@_._ : Je suppose qu'il a essayé
.trigger(e)
(qui ne fonctionne pas). Dans votre cas, l'objet événement est simplement transmis comme paramètre au gestionnaire d'événement, mais ses propriétés ne sont pas utilisées pour le nouvel objet événement, de sorte qu'il ne semble pas nécessaire de le transmettre. Je ne sais pas si le PO en a besoin ou non..parent().click()
semble être une bonne alternative, mais cela dépend de ce que font les autres gestionnaires d'événements dans la hiérarchie. Merci d'avoir essayé :)0 votes
@FelixKling : Ah, vous avez raison. Je me suis également trompé dans ma réponse.
0 votes
@_._ : Je pense que vos deuxième et troisième suggestions sont bonnes.
1 votes
@FelixKling : Merci, mais si l'objet original de l'événement n'est pas nécessaire, alors
.parent().click()
serait de loin la plus simple.