2009-01-20 11 views
60

¿Alguien sabe de un método para desencadenar un evento en Prototype, como puede hacerlo con la función de desencadenante de jQuery?Activar un evento con el Prototipo

He enlazado un detector de eventos utilizando el método de observación, pero también me gustaría poder desencadenar el evento de forma programática.

Gracias de antemano

+0

Eche un vistazo a mi respuesta. Hay un soporte en prototipo ... –

Respuesta

84

event.simulate.js adapte a sus necesidades.

Lo he usado varias veces y funciona a las mil maravillas. Se le permite a activar manualmente eventos nativos, como el clic o la libración de este modo:

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

Lo bueno de esto es que todos los controladores de eventos adjuntos todavía se ejecutarán, al igual que si hubiera hecho clic en el elemento usted mismo.

Para eventos personalizados que puede utilizar el método estándar de prototipo Event.fire().

+0

Exactamente lo que estaba buscando, muchas gracias –

+0

Freakin 'brilliant! Eso me ayudó mucho. Gracias :) – CalebHC

+0

Muy buena interfaz. Sin embargo, me gustaría que el método '.simulate' vaya a Prototype.js de forma nativa :) –

35

No creo que hay una construida en al prototipo, pero se puede utilizar este (no probado, pero debería al menos conseguir que en la dirección correcta):

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

¿quisiste decir $ ('foo'). TriggerEvent ('mouseover')? –

+0

La respuesta de Greg funciona para mí, pero debería ser '$ ('foo'). TriggerEvent ('mouseover');' en lugar de '$ ('foo'). FireEvent ('mouseover');' ps. lo siento im nuevo aquí y no sé cómo citar o comentar una respuesta que ya existe ... thx – thyagx

+0

The Prototype way; ¡muy agradable! – quickshiftin

5

me encontré con este post útil. .. http://jehiah.cz/archive/firing-javascript-events-properly

Cubre una forma de activar eventos tanto en Firefox como en IE.

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

Las respuestas aquí son verdaderas para eventos "normales", es decir, eventos que están definidos por el agente de usuario, pero para eventos personalizados que debe utilizar el método de "fuego" del prototipo. p.ej.

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