Question

Y at-il un moyen d'exécuter une fonction que si event.preventDefault () est appelée sur un événement (par une autre fonction inconnue). Ceci est un plugin jQuery, donc je n'ai pas connaissance de ce que les autres parties de la page peut faire. Je l'ai essayé ceci:

Event.test = Event.preventDefault;
Event.preventDefault = function () {
    alert('Success');
    this.test();
}

mais il ne fonctionne pas ... seulement se comporte comme d'habitude, sans erreur.

A l'inverse, je veux le contraire trop ... pour appeler une fonction que si event.preventDefault () n'est pas appelé. En effet, pour ajouter une fonction à l'action par défaut pour un événement. Des idées? Tout cela est-il possible?

Edit: D'après le commentaire, j'ai une solution au premier problème: http: / /jsfiddle.net/nathan/VAePB/9/ . Il fonctionne dans Chrome (alertes function preventDefault() { [native code] }, mais le undefined IE. Donc, IE ne me laisse pas définir Event.prototype.test, mais il me laissera redéfinis Event.prototype.preventDefault. Bizarre. Je suis sûr que je peux trouver une solution au second problème en fonction de celui-ci si je peux le faire fonctionner dans IE.

Était-ce utile?

La solution

Pour le premier problème, essayer quelque chose comme ceci:

oldPreventDefault = Event.prototype.preventDefault;
Event.prototype.preventDefault = function() {
    //do stuff
    oldPreventDefault.call(this);
}

Je ne sais pas si cela fonctionnera, mais il pourrait être vaut le coup.

Pour le deuxième problème, je voudrais essayer quelque chose de similaire à la gestion des événements en direct. Mettre un écouteur sur un élément parent (à savoir body ou un div de niveau haut). Si vous pouvez obtenir votre crochet dans preventDefault comme indiqué précédemment, vous pouvez l'utiliser pour définir un indicateur. Si l'événement bouillonne à cet élément et votre drapeau n'est pas défini, faites votre comportement étendu. Bien que cela ne fonctionnera pas avec tous les événements, puisque tous les bulles d'événements. Une autre façon d'aborder ce problème pourrait être à l'exécution de retard jusqu'à ce que la pile actuelle a fini d'utiliser setTimeout(0,...) puis vérifier le drapeau.

Autres conseils

Je ne suis pas sûr que je l'ai compris. Tu ne peux pas simplement utiliser event.isDefaultPrevented() comme cette

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