Element.implement({
addLiveEvent: function(event, selector, fn){
this.addEvent(event, function(e){
var t = $(e.target);
if (!t.match(selector)) return false;
fn.apply(t, [e]);
}.bindWithEvent(this, selector, fn));
}
});
$(document.body).addLiveEvent('click', 'a', function(e){ alert('This is a live event'); });
上面的代码是在similar question中完成的,用于在Mootools中实现.live行为。我读过这个问题:Prototype equivalent for jQuery live function。
如何在Prototype中实现此功能?可能是这样可以实现的东西:
document.liveobserve('click', 'a', function(e){ alert('This is a live event');
编辑以澄清问题。
答案 0 :(得分:0)
最简单(也许不是最快或最好)的方式似乎是:
Element.live = function(evType, evSelector, evBlock) {
var mySelector = evSelector;
var myBlock = evBlock;
this.observe(evType, function(ev) {
if (ev.target.match(mySelector)) {
evBlock(ev);
}
});
};
参数evSelector和evBlock被分配给局部变量,因此它们可用于事件处理程序(它是一个闭包)。传递的块evBlock传递给事件对象,就像普通的Prototype事件处理程序一样。
应该注意这将处理'evType'类型的每个事件,所以如果它是mouseMove / mouseOver,这将使你的页面变慢。 FireBug也可能会因为必须单步执行的事件数量而暂时停留在您身上。
编辑:根据评论更改