2009-10-31 3 views

Répondre

5

Cela dépend de la version du prototype. A partir d'une réponse plus générale I wrote previously:

  • Version

    1.5.x:

    // inspect 
    Event.observers.each(function(item) { 
        if(item[0] == some_form && item[1] == 'submit') { 
         alert(item[2]) // [some anonymous function] 
        } 
    }) 
    
  • versions 1.6 à 1.6.0.3, y compris (devenu très difficile ici)

    // inspect. "_eventId" is for < 1.6.0.3 while 
    // "_prototypeEventID" was introduced in 1.6.0.3 
    var submitEvents = Event.cache[some_form._eventId || (some_form._prototypeEventID || [])[0]].submit; 
    submitEvents.each(function(wrapper){ 
        alert(wrapper.handler) // [some anonymous function] 
    }) 
    
  • [ Actuel] version 1.6.1 (un peu mieux)

    // inspect 
    var submitEvents = some_form.getStorage().get('prototype_event_registry').get('submit'); 
    submitEvents.each(function(wrapper){ 
        alert(wrapper.handler) // [some anonymous function] 
    }) 
    
+0

Exactement ce que je cherchais, merci. On dirait que nous utilisons 1.6.0.3 mais j'obtiens que Event.cache est undefined = ( –

+0

@gct: 'Event.cache' est réglé en vertu de simplement en incluant 1.6.0.3: (http://prototypejs.org /assets/2008/9/29/prototype-1.6.0.3.js) Je suppose que la variable 'submitEvents' est ce qui n'est pas défini, ce qui peut arriver quand il n'y a tout simplement pas de gestionnaire' submit' lié ** avec Prototype ** (lire: * not * y compris 'onsubmit =" ... "') * au point que vous vérifiez * Vous devez voir plus de code pour vous aider. –

0

Si vous voulez réellement accéder au gestionnaire, non, il n'y a pas de moyen facile. Vous pouvez bien sûr arrêter d'observer tous les gestionnaires initiés par prototype pour un type d'événement, mais je ne pense pas que ce soit ce que vous cherchez.

0

S'il n'y a pas trop d'autres auditeurs sur some_form + submit -event ou que vous contrôlez tous les autres que vous pourriez nous mettre au travail avec

var boundSubmitEvents = some_form.getStorage().get('prototype_event_registry').get('submit'); 
boundSubmitEvents.each(function(wrapper){ 
    //do with wrapper.handler whatever 
}) 

btw. Que voulez-vous dire avec

grab que gestionnaire d'événements anonyme retour sur

Questions connexes