2010-01-21 66 views
3

如何製作通過ajax加載的元素,採用與mootools 1.11上同一類相關的事件?如何在mootools上實現jQuery live bind事件?

據我所知,在jQquery,如果你的Ajax響應由類似<div class='button'>
如果使用live$('.button'),這些事件將自動綁定事件綁定。

MooTools 1.11可能嗎?

+0

清理語法,添加參考'live',添加JavaScript代碼來 – artlung 2010-01-22 15:09:59

+0

嗨鎖。你是否設法在1.11中工作? – denormalizer 2010-12-14 00:38:24

+0

對於遲到的回覆感到抱歉。無論如何,是的,我設法讓它工作,雖然我無法提供一個鏈接到我使用它的網站,因爲它的域名/主機已經過期。我可以提供一個代碼片段,但它與接受的答案几乎相似,只是它的編寫當然是1.11。這裏有一個鏈接:http://pastebin.com/HZ4cDLU6 – lock 2010-12-16 03:20:23

回答

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

在此代碼下,返回false;如果它與選擇器不匹配,則阻止默認事件(即點擊)發射。建議這種修改:'if(t.match(selector)) \t \t fn.apply(t,[e]);'儘管仍然不理想,因爲沒有效果的額外事件被不必要地綁定到元素上。 – 2011-08-08 22:21:58

+4

不要使用這個,使用http://mootools.net/docs/core/Element/Element.Delegation – 2011-12-08 17:23:38

+0

@DimitarChristoff你甚至讀過這個問題嗎?你鏈接到v1.4.2文檔。 – anomareh 2011-12-09 00:44:17

1

anomareh是在正確的軌道上。

你也想檢查事件目標的祖先元素。

我不確定這是否適用於所有事件,因爲它們中的一些不會冒泡(不知道Mootools如何處理這個問題)。

+0

我認爲document.body是整個文檔,不是嗎? – 2010-03-05 01:43:30

+0

這是真的,但無關緊要,因爲anomareh的代碼只檢查事件目標是否匹配選擇器,而jQuery的'live()'還檢查事件目標的祖先。 – 2010-03-12 11:51:44

1

這是非常酷的想法,jQuery .live()以類似的方式工作,但也有冒泡的問題。 如果有些父母爲此活動附加了stopPropagation(),則不會發生任何情況。

我認爲理想的解決方案是構建自定義事件,在這裏是非常好的一篇關於尼古拉斯Zakas編寫自定義事件:

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

但是這個例子不具有事件冒泡實現的呢。 某種形式的預防措施可能會解決問題。

1

您可以用這種方式:

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