50 votes

Un événement personnalisé dans jQuery qui n'est pas lié à un élément DOM?

Je suis curieux de savoir si il est possible de créer un événement personnalisé en jQuery qui n'est pas lié à un élément du DOM.

J'ai beaucoup préfèrent jQuery pour YUI, mais il est une chose YUI que j'aime, qui est de créer des événements personnalisés et être en mesure de souscrire à plus tard.

Par exemple, cela crée un événement qui est lié à une variable, et non pas à un élément du DOM:

var myevent = new YAHOO.util.CustomEvent("mycustomevent");

Tous les exemples et la documentation, j'ai lu pour jQuery besoin de quelque chose comme:

$('body').bind('mycustomevent', function(){
    //do stuff
});

43voto

Blixt Points 23266

Vous pouvez déclencher personnalisé des événements mondiaux comme ça en jQuery:

jQuery.event.trigger('mycustomevent', [arg1, arg2, arg3]);

Ces déclenchera pour n'importe quel élément.

Depuis jQuery est construit autour d'objets DOM, vous devez lier vos événements pour les objets DOM. Vous pouvez probablement trouver un moyen de lier les événements sans trop (vous l'avez fait), mais ce n'est pas une prise en charge de la méthodologie.

Comme vous l'avez écrit dans votre propre réponse, vous pouvez lier votre événement mondial objet DOM si vous ne souhaitez pas lier à une page individuelle de l'élément:

$(document).bind('mycustomevent', function (e, arg1, arg2, arg3) { /* ... */ });

6voto

Geuis Points 10333

Pour les futurs lecteurs, il est assez simple de le faire. J'ai fait des recherches plus approfondies après avoir posté ma question. Malheureusement, aucun des autres commentateurs n’avait raison.

Pour lier un événement personnalisé:

 $().bind('mycustomevent', function(){
    //code here
});
 

En outre, vous pouvez créer des données dans l'objet événement accessible ultérieurement:

 $({mydata:'testdata'}).bind('mycustomevent',function(){
    //code here
});
 

4voto

TheBentArrow Points 67

La liaison aux éléments non dom a été supprimée dans jQuery 1.4.4.

3voto

bigmattyh Points 9167

Vous pouvez toujours déclencher et répondre aux événements de manière arbitraire à l'aide de jQuery, même si vous ne savez pas à quel élément les attacher. Créez simplement un élément "récepteur" dans votre document, auquel vous pouvez lier tous vos événements personnalisés. Cela vous permet de gérer votre logique de gestion d'événements en un seul endroit, pour tous vos événements non spécifiques à un élément.

 $(document).ready(function() {

  $(body).append('<div id="receiver">');

  $("#receiver").bind("foo_event", function () {
    // decide what to do now that foo_event has been triggered.
  });

  $("#some_element").click(function() {
    $("#receiver").trigger("foo_event");
  });

});
 

3voto

Himanshu P Points 912

Les rappels jQuery offrent un moyen simple d'implémenter un système de sous-système de pub indépendant du DOM.

Au bas de la page liée se trouve un exemple de code qui explique comment faire cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X