2009-01-20 50 views
60

JQuery'nin tetikleme işlevinde olduğu gibi Prototip'te bir olayı tetiklemek için bir yöntem bilen var mı?Prototip ile bir olay tetikleme

Bir olay dinleyicisini gözlem yöntemini kullanarak bağladım, ancak olayı programlı olarak da tetikleyebilirim.

+0

Cevabıma bir bakın. Orada prototip bir destek var ... –

cevap

84

event.simulate.js ihtiyaçlarınıza uygun önceden

teşekkürler.

Bunu birkaç kez kullandım ve çekicilik gibi çalışıyor. elle böyle tıklama olarak yerli olayları tetiklemek ya da öylesine gibi seyretmeye O yapmanızı sağlar:

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

Bu konuda çok şey bütün ekli olay işleyicileri hala sanki tıkladığınız olurdu, idam edilecek olması kendin eleman.

Özel olaylar için standart prototip yöntemini Event.fire() kullanabilirsiniz.

+0

Tam olarak ne aradığımı, çok teşekkürler –

+0

Freakin 'parlak! Bu bana çok yardımcı oldu. Teşekkürler :) – CalebHC

+0

Çok güzel bir arayüz. Bununla birlikte, '.simulate' yönteminin Prototype.js'ye doğal olarak gitmesini istiyorum :) –

35

Ben Prototip için yerleşik bir tane sanmıyorum, ama bu (test edilmedi ama en azından doğru yönde almalısınız) kullanabilirsiniz:

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

$ ('foo') demek istediniz triggerEvent ('mouseover')? –

+0

Greg'in cevabı benim için çalışıyor, ancak '$ (' foo ') olmalı, triggerEvent (' mouseover '); '' $ (' foo ') yerine, fireEvent (' mouseover '); 'ps. üzgünüm burada yeni ve zaten var olan bir cevap nasıl alıntı ya da yorum yapmak için bilmiyorum ... thx – thyagx

+0

Prototip yolu; çok hoş! – quickshiftin

5

Ben bu mesajı faydalı buldu. Her iki Firefox ve IE'de olayları tetiklemenin bir yolunu içerir. Burada

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

cevaplar "Normal" olayları için geçerliyse, o İstemcisi tarafından tanımlanan olaylar olmakla birlikte, özel etkinlikler için size prototipin "ateş" yöntemi kullanmalısınız. Örneğin.

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