2009-08-04 7 views
3

Dites que j'ajoute des événements à un objet en utilisant soit addEventListener ou attachEvent (selon le navigateur); est-il possible d'appeler ultérieurement ces événements par programme?Javascript - invocation d'événements par programmation

Les gestionnaires d'événements sont ajoutés/supprimés à l'aide d'un objet comme celui-ci:

var Event = { 
    add: function(obj,type,fn) { 
     if (obj.attachEvent) { 
      obj.attachEvent('on'+type,fn); 
     } else { 
      obj.addEventListener(type,fn,false); 
     } 
    }, 
    remove: function(obj,type,fn) { 
     if (obj.detachEvent) { 
      obj.detachEvent('on'+type,fn); 
     } else { 
      obj.removeEventListener(type,fn,false); 
     } 
    } 
} 

Ou ai-je besoin de stocker des copies de chaque gestionnaire et il suffit d'ajouter une fonction Event.invoke (...)?

Edit: En outre, jQuery est pas une option: D

Répondre

1

Pouvez-vous pas créer des fonctions qui font le travail nécessaire, exécutez ceux des événements puis exécutez ces mêmes fonctions plus tard en cas de besoin?

11

Comme d'habitude, vous devez le faire d'une façon pour Internet Explorer, et la bonne façon pour tout le reste ;-)

Pour IE:

document.getElementById("thing_with_mouseover_handler").fireEvent("onmouseover"); 

Voir the MSDN library pour plus d'informations.

Pour les navigateurs réels:

var event = document.createEvent("MouseEvent"); 
event.initMouseEvent("mouseover", true, true, window); 
document.getElementById("thing_with_mouseover_handler").dispatchEvent(event); 

Notez que, bien que la deuxième approche, basée sur des normes semble plus longue haleine, il est également beaucoup plus souple: consultez la documentation, en commençant par le Mozilla DOM Event Référence à https://developer.mozilla.org/en/DOM/event

Bien que seulement tangentiellement lié à ce que vous essayez de faire (il est lié à des événements personnalisés, plutôt que des événements normaux) Dean Edwards a un exemple de code au http://dean.edwards.name/weblog/2009/03/callbacks-vs-events/ qui peut valoir le détour.

Questions connexes