【发布时间】:2010-10-02 10:01:32
【问题描述】:
有没有人知道在 Prototype 中触发事件的方法,就像使用 jQuery 的触发函数一样?
我已经使用观察方法绑定了一个事件侦听器,但我也希望能够以编程方式触发事件。
提前致谢
【问题讨论】:
-
看看我的回答。原型中有一个支持...
标签: javascript events prototypejs
有没有人知道在 Prototype 中触发事件的方法,就像使用 jQuery 的触发函数一样?
我已经使用观察方法绑定了一个事件侦听器,但我也希望能够以编程方式触发事件。
提前致谢
【问题讨论】:
标签: javascript events prototypejs
event.simulate.js 符合您的需求。
我已经用过几次了,它就像一个魅力。它允许您手动触发原生事件,例如点击或悬停,如下所示:
$('foo').simulate('click');
这样做的好处是所有附加的事件处理程序仍将被执行,就像您自己单击元素一样。
对于自定义事件,您可以使用标准原型方法Event.fire()。
【讨论】:
.simulate 方法原生地进入 Prototype.js :)
我不认为 Prototype 内置了一个,但你可以使用它(未经测试,但至少应该让你朝着正确的方向前进):
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');
【讨论】:
$('foo').triggerEvent('mouseover'); 而不是 $('foo').fireEvent('mouseover'); ps。抱歉,我是新来的,不知道如何引用或评论已经存在的答案...谢谢
我发现这篇文章很有帮助...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);
}
}
【讨论】:
这里的答案对于“正常”事件是正确的,即由用户代理定义的事件,但对于自定义事件,您应该使用原型的“触发”方法。例如
$('something').observe('my:custom', function() { alert('Custom'); });
.
.
$('something').fire('my:custom'); // This will cause the alert to display
【讨论】: