6
votes

Observez un événement JS, lorsque vous ne connaissez que la partie du nom de l'événement?

J'ai hérité de JS (que je ne peux pas changer) qui incendie une série d'événements: xxx pré>

et je veux observer pour tous ces événements et analyser le Valeur pour section code>, et faire quelque chose de différent selon son contenu. p>

Si cela n'a pas changé, je pouvais faire cela: P>

jQuery(document).on('section:top', doStuff );


5 commentaires

Vous ne pouvez pas! JQuery's Trigger ne stocke pas les événements nulle part, qui se produit généralement lorsque les gestionnaires d'événements sont liés, donc si cela est donc de l'autre côté, vous pourriez probablement le faire. Bien sûr, tout est possible, vous pouvez analyser tout le JavaScript et rechercher des appels vers Trigger , mais c'est juste faux.


Je pense que vous n'avez pas de chance, ce sont des événements essentiellement différents ... cette partie dynamique de l'événement aurait dû être un argument à l'événement. jQuery (document) .trigger ('section', section); n'avez-vous aucun moyen de savoir quelles sont toutes les sections valides? Si tel est le cas, vous pouvez faire $ (). On ('Section: Section supérieure: Section inférieure: Section droite: gauche')


Stackoverflow.com/Questtions/26225987/...


Ces événements devraient utiliser l'espace de noms à la place


@ A.wolff c'est une autre façon de le faire. Cependant, la plupart des exemples d'espaces de noms d'événements que j'ai vus ne sont pas utilisés de cette façon, il est généralement de supprimer un gestionnaire sans y remédier, car John Resig le mettit, EJOHN.ORG/Apps/workshop/adv-Talk/#13 , voir aussi CSS-Tricks.com/namesPaCed-Event-jQuery . Pour moi, on ressent que le nom de la section devrait simplement être un paramètre de l'événement, c'est ainsi que nous distinguons les événements dans tous les autres cas, tels que la vérification Event.Target .


3 Réponses :


4
votes

Vous ne pouvez pas écouter tous les événements dans le style de $ (). Sur ('Section: *') , malheureusement. Si vous pouvez changer le code, je ferais ce qui suit: xxx

puis vous écoutez-le et n'a pas besoin d'analyser quoi que ce soit xxx

Si vous souhaitez minimiser vos modifications de code, laissez l'ancien événement de là, ainsi que le code existant ne sera pas affecté.

Une approche différente serait d'utiliser des espaces de noms d'événements. xxx

i, cependant, préférez-vous la première approche car les espaces de noms d'événements sont les plus couramment utilisés dans un but différent: être capable de supprimer les événements sans être forcé de conserver une référence à la gestionnaire lui-même. Voir http://css-tricks.com/namesPaCed-Event-jquery/ et http://ejohn.org/apps/workshop/adv-Talk/#13. Je préfère utiliser des styles que d'autres développeurs sont utilisés, s'ils font le travail.


1 commentaires

Une bonne réponse, j'ai utilisée une partie de cela dans ma solution finale. Merci!



0
votes

Je ne suis vraiment pas sûr de votre cas d'utilisation, mais vous pouvez écraser $. fn.trigger code> Méthode:

p>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


0 commentaires

0
votes

Voici ce que j'ai fini par faire.

C'est une combinaison de la solution de Juan Mendes, et utilise un méthode de la bibliothèque de prototypes

à l'origine, il y avait une fonction qui a exécuté ce code: xxx

donc je étendue la fonction avec la méthode de prototype , car mon projet a utilisé le prototype ainsi que jQuery. xxx

alors, il exécute l'original, mais aussi incendie mon événement personnalisé qui inclut les informations de la section.

Maintenant, je peux le faire pour observer cet événement et obtenir le type de section: xxx bien sûr Cela signifie que je dois utiliser à la fois le prototype et JQuery dans la même portée, ce qui n'est pas la meilleure chose au monde. Mais cela a fonctionné.


2 commentaires

Pourquoi ne pouvez-vous pas simplement modifier myObject.Prototype.AdJustSection dans son lieu d'origine? Je ne ferais que cela pour les bibliothèques tiers où apporter des modifications à leur code peut rendre très difficile la mise à niveau.


Bon point, mais je n'ai pas accès à la modification de la déclaration de méthode originale.