如何製作通過ajax加載的元素,採用與mootools 1.11上同一類相關的事件?如何在mootools上實現jQuery live bind事件?
據我所知,在jQquery,如果你的Ajax響應由類似<div class='button'>
,
如果使用live
到$('.button')
,這些事件將自動綁定事件綁定。
MooTools 1.11可能嗎?
如何製作通過ajax加載的元素,採用與mootools 1.11上同一類相關的事件?如何在mootools上實現jQuery live bind事件?
據我所知,在jQquery,如果你的Ajax響應由類似<div class='button'>
,
如果使用live
到$('.button')
,這些事件將自動綁定事件綁定。
MooTools 1.11可能嗎?
也許這樣的事情可能會做你想要的?雖然我不確定它是否能在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'); });
在此代碼下,返回false;如果它與選擇器不匹配,則阻止默認事件(即點擊)發射。建議這種修改:'if(t.match(selector)) \t \t fn.apply(t,[e]);'儘管仍然不理想,因爲沒有效果的額外事件被不必要地綁定到元素上。 – 2011-08-08 22:21:58
不要使用這個,使用http://mootools.net/docs/core/Element/Element.Delegation – 2011-12-08 17:23:38
@DimitarChristoff你甚至讀過這個問題嗎?你鏈接到v1.4.2文檔。 – anomareh 2011-12-09 00:44:17
anomareh是在正確的軌道上。
你也想檢查事件目標的祖先元素。
我不確定這是否適用於所有事件,因爲它們中的一些不會冒泡(不知道Mootools如何處理這個問題)。
我認爲document.body是整個文檔,不是嗎? – 2010-03-05 01:43:30
這是真的,但無關緊要,因爲anomareh的代碼只檢查事件目標是否匹配選擇器,而jQuery的'live()'還檢查事件目標的祖先。 – 2010-03-12 11:51:44
這是非常酷的想法,jQuery .live()
以類似的方式工作,但也有冒泡的問題。 如果有些父母爲此活動附加了stopPropagation()
,則不會發生任何情況。
我認爲理想的解決方案是構建自定義事件,在這裏是非常好的一篇關於尼古拉斯Zakas編寫自定義事件:
http://www.nczonline.net/blog/2010/03/09/custom-events-in-javascript/
但是這個例子不具有事件冒泡實現的呢。 某種形式的預防措施可能會解決問題。
您可以用這種方式:
$(document.body).addEvent('click:relay(.filterButton)', function(){
// do something
});
清理語法,添加參考'live',添加JavaScript代碼來 – artlung 2010-01-22 15:09:59
嗨鎖。你是否設法在1.11中工作? – denormalizer 2010-12-14 00:38:24
對於遲到的回覆感到抱歉。無論如何,是的,我設法讓它工作,雖然我無法提供一個鏈接到我使用它的網站,因爲它的域名/主機已經過期。我可以提供一個代碼片段,但它與接受的答案几乎相似,只是它的編寫當然是1.11。這裏有一個鏈接:http://pastebin.com/HZ4cDLU6 – lock 2010-12-16 03:20:23