2009-01-20 7 views
60

Kennt jemand eine Methode, um ein Ereignis in Prototype auszulösen, wie Sie mit der Triggerfunktion von jQuery können?Auslösen eines Ereignisses mit Prototyp

Ich habe einen Ereignis-Listener mit der Methode beobachten, aber ich möchte auch in der Lage sein, das Ereignis programmatisch auszulösen.

Vielen Dank im Voraus

+0

Werfen Sie einen Blick auf meine Antwort. Es gibt eine Unterstützung in Prototyp ... –

Antwort

84

event.simulate.js Ihren Bedürfnissen entspricht.

Ich habe diese mehrmals verwendet und es funktioniert wie ein Charme. Es ermöglicht Ihnen, manuell nativen Ereignisse auslösen, wie Klick- oder schweben wie so:

$('foo').simulate('click'); 

Die große Sache daran ist, dass alle Event-Handler angebracht wird noch ausgeführt werden, so als ob Sie hätte geklickt die Element selbst.

Für benutzerdefinierte Ereignisse können Sie die Standard-Prototyp-Methode Event.fire() verwenden.

+0

Genau das, was ich gesucht habe, vielen Dank –

+0

Freakin 'brilliant! Das hat mir sehr geholfen. Danke :) – CalebHC

+0

Sehr schöne Schnittstelle. Ich möchte jedoch, dass diese '.simulate' Methode nativ in Prototype.js geht :) –

35

Ich glaube nicht, dass man in zu Prototyp gebaut ist, aber Sie können diese (nicht getestet, aber zumindest sollten Sie in der richtigen Richtung bekommen) verwenden:

Element.prototype.triggerEvent = function(eventName) 
{ 
    if (document.createEvent) 
    { 
     var evt = document.createEvent('HTMLEvents'); 
     evt.initEvent(eventName, true, true); 

     return this.dispatchEvent(evt); 
    } 

    if (this.fireEvent) 
     return this.fireEvent('on' + eventName); 
} 

$('foo').triggerEvent('mouseover'); 
+0

meinst du $ ('foo'). TriggerEvent ('mouseover')? –

+0

Gregs Antwort funktioniert bei mir, aber es sollte '$ ('foo') sein. TriggerEvent ('mouseover');' anstelle von '$ ('foo'). FireEvent ('mouseover');' ps. Entschuldigung, ich bin neu hier und weiß nicht, wie man eine Antwort zitiert oder kommentiert, die bereits existiert ... thx – thyagx

+0

Der Prototyp Weg; Sehr schön! – quickshiftin

5

fand ich diesen Beitrag hilfreich. .. http://jehiah.cz/archive/firing-javascript-events-properly

Es deckt eine Möglichkeit, Ereignisse in Firefox und IE zu feuern.

function fireEvent(element,event){ 
    if (document.createEventObject){ 
     // dispatch for IE 
     var evt = document.createEventObject(); 
     return element.fireEvent('on'+event,evt) 
    } 
    else{ 
     // dispatch for firefox + others 
     var evt = document.createEvent("HTMLEvents"); 
     evt.initEvent(event, true, true); // event type,bubbling,cancelable 
     return !element.dispatchEvent(evt); 
    } 
} 
3

Die Antworten hier wahr sind für „Normal“ Ereignisse, dh Ereignisse, die durch den User Agent definiert sind, aber für benutzerdefinierte Ereignisse sollten Sie Prototyp des „Feuer“ Methode verwenden. z.B.

$('something').observe('my:custom', function() { alert('Custom'); }); 
. 
. 
$('something').fire('my:custom'); // This will cause the alert to display