Prototype中的jQuery Live实现

时间:2010-03-05 10:35:47

标签: prototypejs mootools jquery

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

编辑以澄清问题。

1 个答案:

答案 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也可能会因为必须单步执行的事件数量而暂时停留在您身上。

编辑:根据评论更改