2009-01-20 71 views
60

有沒有人知道在Prototype中觸發事件的方法,就像使用jQuery的觸發器函數一樣?使用原型觸發事件

我已經使用觀察方法綁定了一個事件監聽器,但是我也希望能夠以編程方式觸發事件。

在此先感謝

+0

看看我的答案。在原型中有一個支持... – 2010-09-14 11:43:36

回答

84

event.simulate.js符合您的需求。

我已經使用了這幾次,它的作品就像一個魅力。它可以讓你手動觸發本地事件,如點擊或懸停,像這樣:

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

關於這個偉大的事情是,所有連接的事件處理程序仍然會執行,就像你會點擊元素你自己。

對於定製事件您可以使用標準原型方法Event.fire()

+0

正是我在找什麼,非常感謝 – 2009-01-20 10:49:28

+0

Freakin'輝煌!這幫了我很多。謝謝:) – CalebHC 2009-12-29 04:45:55

35

我不認爲這是一個內置於原型,但你可以使用這個(未經測試,但至少應該讓你在正確的方向):

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

我發現這個職位有幫助。 .. http://jehiah.cz/archive/firing-javascript-events-properly

它涵蓋了一種在Firefox和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

的答案在這裏是「正常」事件屬實,那是一個由用戶代理定義的事件,但對於自定義事件,你應該使用原型的「火」的方法。例如

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