7
votes

Comment buller l'événement de jQuery personnalisé à la fenêtre.document?

J'ai écrit un menu déroulant absolument positionné. Je déclenche un événement personnalisé lorsque ce menu s'ouvre:

var dd = new ps.DropDown();
$(dd).on('MENU_OPEN', function(event, instance) {
    // this would stop bubbling to $(window.document)
    // event.stopPropagation();
});
$(window.document).on('MENU_OPEN', function(event, instance) {
    // bubbled!
});


2 commentaires

Votre code a l'air bien quiconque s'est abonné à menu_open doit être déclenché avec .trigger ('Menu_Open) .


Oui, mais je cherche une solution qui ne nécessite pas de référence à une instance de ps.dropdown. Je veux que l'événement bulle soit à la fenêtre.document.


3 Réponses :


-1
votes

Si j'ai besoin d'événements personnalisés globalement sans référence spécifique, je déclenche les événements sur le corps de la page

$('body').on('MENU_OPEN',function(event, dropDown){
    // bubbled
});


1 commentaires

Merci d'avoir répondu, mais je n'essaie pas d'éviter d'utiliser $ (window.document). Par exemple, lorsque je clique sur un bouton, les bulles d'événement cliquez sur chaque parent jusqu'à ce qu'il frappe la fenêtre.document. Un auditeur sur tout élément parent peut potentiellement gérer l'événement. Je cherche à reproduire ceci pour des événements personnalisés.



-1
votes

Il n'est pas nécessaire de déclencher des événements personnalisés à partir d'un élément DOM:

$(window.document).bind('dropDownHasOpened', function() {
   console.log($(this));
   // 'this' is window.document 
});

ps.DropDown.prototype._onOpenComplete = function() {
  $.event.trigger('dropDownHasOpened');
}


1 commentaires

Je comprends que ce n'est pas nécessaire. Dans mon exemple, je ne déclenche pas sur $ (window.document) mais sur l'instance déroulante. Je suis intéressé par la fabrication de l'événement de cette instance vers le haut à $ (window.document) similaire à la manière dont un bouton cliquez sur l'événement sera bougé à travers ses parents à Windows.document.



12
votes

Je pense que vous recherchez appel à appeler $ .Avent.Trigger manuellement: xxx

Le dernier paramètre est utilisé pour le drapeau "seulhandLers", false dans ce cas car nous voulons déclencher Les éléments utilisent et déclenchent ensuite à nouveau sur chaque parentnode. Dans cette mode, vous pouvez lier "myCustomvent" à quelque chose entre la fenêtre et le nœud où cet événement est originaire.


1 commentaires

Où est-ce documenté?