2011-02-22 57 views

回答

14

使用demo

dojo.query("body").delegate(selector, eventName, fn); 

代碼 - 重寫道場原混入樣delegate功能

dojo.provide("dojox.NodeList.delegate"); 
dojo.require("dojo.NodeList-traverse"); 
dojo.extend(dojo.NodeList, { 
    delegate: function (selector,eventName, fn) { 
     return this.connect(eventName, function (evt) { 
      var closest = dojo.query(evt.target).closest(selector, this); 
      if (closest.length) { 
       fn.call(closest[0], evt); 
      } 
     }); //dojo.NodeList 
    } 
}); 

看到ticket#11459

您可以更普遍地使用它,如jQuery delegate,而不僅僅是live,因爲live基本上是文檔級別的delegate

+2

爲了澄清起見,'delegate'函數應該在Dojo 1.6的完整發行版中可用,方法是要求'dojox.NodeList.delegate'(該模塊可以在鏈接票尾的變更集中看到)在答案中)。如果您好奇,1.6 RC現在可用。 http://download.dojotoolkit.org/release-1.6.0rc1/ –

+0

是的,它自1.6以來就可以使用:http://doctor.dojotoolkit.org/reference-guide/dojox/NodeList/delegate.html#dojox-nodelist-delegate –

1

我覺得dojo.behavior執行類似的功能

0

只需使用

on(document, "xxx", function(){}) 

如。 jQuery中:在道場$(".className").live(function(){})

,它evquilant到:on(document, ".className", function(){})

其實就是jquery.live做什麼,它的事件綁定到文件要實現的功能。

相關問題