2009-01-20 74 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