Attiva un evento con Prototype

Qualcuno sa di un metodo per triggersre un evento in Prototype, come è ansible con la funzione di trigger di jQuery?

Ho associato un listener di eventi utilizzando il metodo observ, ma vorrei anche essere in grado di triggersre l’evento in modo programmatico.

Grazie in anticipo

Solutions Collecting From Web of "Attiva un evento con Prototype"

event.simulate.js soddisfa le tue esigenze.

L’ho usato più volte e funziona come un incantesimo. Ti consente di triggersre manualmente eventi nativi , come il clic o il passaggio del mouse in questo modo:

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

La cosa grandiosa di questo è che tutti i gestori di eventi collegati verranno comunque eseguiti, proprio come se avessi fatto clic sull’elemento tu stesso.

Per eventi personalizzati è ansible utilizzare il metodo prototype standard Event.fire() .

Non penso che ce ne sia uno integrato in Prototype, ma puoi usarlo (non testato ma dovrebbe almeno metterti nella giusta direzione):

 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'); 

Ho trovato questo post utile … http://jehiah.cz/archive/firing-javascript-events-properly

Copre un modo per far scoppiare eventi sia in Firefox che in 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); } } 

Le risposte qui sono vere per gli eventi “normali”, vale a dire gli eventi definiti dall’agente utente, ma per gli eventi personalizzati è necessario utilizzare il metodo “fuoco” del prototipo. per esempio

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