有没有办法在Prototype中触发事件,就像可以使用jQuery的trigger功能一样?
我已经使用observe方法绑定了一个事件监听器,但是我也想能够通过程序来触发此事件。
有没有办法在Prototype中触发事件,就像可以使用jQuery的trigger功能一样?
我已经使用observe方法绑定了一个事件监听器,但是我也想能够通过程序来触发此事件。
event.simulate.js
适合您的需求。
我已经使用过这个几次,它非常有效。它允许您手动触发本机事件,例如点击或悬停,如下所示:
$('foo').simulate('click');
这个方法的好处是,所有已附加的事件处理程序仍然会被执行,就像你自己点击该元素一样。
对于自定义事件,您可以使用标准的原型方法Event.fire()
。
.simulate
方法能够本地化到Prototype.js中 :) - Jesper Rønn-Jensen我认为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');
。附:抱歉我是新手,不知道如何引用或评论已经存在的答案...谢谢。 - avlnx我发现这篇文章很有帮助... 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