如何在mootools上实现jQuery live bind事件?

时间:2010-01-21 08:46:36

标签: javascript jquery dom mootools

如何制作通过ajax加载的元素,在mootools 1.11上采用与同一类关联的事件?

据我所知,在jQquery中,如果您的ajax响应包含<div class='button'>之类的内容,则如果使用live$('.button')进行事件绑定,则事件会自动绑定。

MooTools 1.11可以实现吗?

4 个答案:

答案 0 :(得分:7)

也许这样的事情可能会做你想要的事情?虽然我不确定它是否适用于1.11。

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

答案 1 :(得分:1)

anomareh走在正确的轨道上。

您还需要检查事件目标的祖先元素。

我不确定这是否适用于所有事件,因为它们中的一些不会冒泡(不确定Mootools如何处理这个)。

答案 2 :(得分:1)

这是一个非常酷的想法,jQuery .live()以类似的方式工作,但冒泡也存在问题。 如果某位家长已为此事件附加stopPropagation(),则不会发生任何事情。

我认为理想的解决方案是构建自定义事件,这里有关于Nicholas Zakas编写的自定义事件的非常好的帖子:

http://www.nczonline.net/blog/2010/03/09/custom-events-in-javascript/

但是这个例子还没有实现事件冒泡。 某种鼓泡有其后备因素可以解决这个问题。

答案 3 :(得分:1)

您可以这样使用:

$(document.body).addEvent('click:relay(.filterButton)', function(){
// do something
});