Comment continuer la propagation de l'évènement après l'annulation?

Lorsqu'un utilisateur clique sur un lien, je tiens à présenter avec une boîte de dialogue de confirmation. Si on clique sur "Oui", je voudrais continuer la navigation d'origine. Un hic: ma boîte de dialogue de confirmation est mis en œuvre par le retour de jQuery.Différée objet qui est résolu que lorsque/si l'utilisateur clique sur le bouton Oui. Donc, fondamentalement, la boîte de dialogue de confirmation est asynchrone.

Donc, fondamentalement, je veux quelque chose comme ceci:

$('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 être un drapeau et re-trigger sur, mais c'est salissant que diable. Aucun moyen naturel de le faire?

  • Avez-vous essayé $this.trigger(e); (edit qui aurait besoin d'un drapeau si cela a fonctionné) ou $this.parent().trigger(e) (dans le rappel), où $this se réfère à l'cliqué éléments?
  • Cela ne marchera pas parce que e.preventDefault(); e.stopPropogation(); a envoyé des drapeaux sur l'e. Si il y avait moyen d'en prendre une copie de l'e à l'e2 alors que je pourrais appeler quelque chose le long des lignes de e.handler(e2) qui je pense pourrait fonctionner.
  • Eh bien, j'ai pensé que peut-être que jQuery est assez intelligent et réinitialise les drapeaux lorsqu'elle est passée à trigger...
  • bon appel, mais je viens de vérifier le code - pas de chance.
  • Je viens d'essayer votre .parent() solution à l'aide de l'objet d'événement, et il semble bien fonctionner. jsfiddle.net/vTzDM je me demande pourquoi elle n'avait pas de travail pour George.
  • Je suppose qu'il a essayé .trigger(e) (qui ne fonctionne pas). Dans votre cas, l'objet event est juste passé comme paramètre pour le gestionnaire d'événements, mais ses propriétés ne sont pas utilisés pour le nouvel événement de l'objet, de sorte que le passant ne semble pas être nécessaire. Je ne sais pas si l'OP a besoin ou pas. .parent().click() semble être une bonne alternative, mais cela dépend de ce que les autres gestionnaires d'événements dans la hiérarchie sont en train de faire. Merci d'essayer 🙂
  • Ah, vous avez raison. J'ai mal dans ma réponse trop.
  • Je pense que la deuxième et la troisième suggestion sont vraiment bon.
  • Merci, mais si l'original de l'objet d'événement n'est pas nécessaire, alors .parent().click() serait de loin la plus simple.

InformationsquelleAutor George Mauer | 2011-10-18