我有一些代码,我在其中创建一个带有Ajax调用(href属性)的dijit.Dialog来填充内容。
我要将返回的内容解析为dojo.connect一个click事件到返回内容中的链接。
但是当我做一个dojo.query(“a”,this.current_popup.domNode)时,我得到一个空数组
是否有人知道怎样才能将onclick附加到所有返回的内容?
保罗答案 0 :(得分:2)
将事件处理程序绑定到Dialog窗口小部件的DOM节点并使用事件委派来捕获任何“a”点击的成本更低。这样,您可以避免任何事件处理程序清理,特别是如果Dialog的内容经常更改。如果使用小部件的connect方法来完成工作,则可以避免事件处理程序清理。
所以,如果你在dijit.Dialog中的方法内部进行连接,你可以使用类似的东西:
this.connect("onclick", function(evt){
var node = evt.target;
if("a" == node.nodeName.toLowerCase()){
//node is an a tag, do what you want with it,
//for example, read node.href to get the URL attached to it.
//If you want to prevent following that URL and prevent further
//event bubbling, stop the event:
dojo.stopEvent(evt);
}
});
如果您在窗口小部件实例之外进行此连接工作,而不是使用this.connect,请使用widgetInstance.connect(),假设widgetInstance是一个引用dijit.Dialog实例的变量。
通过使用该版本的connect,当Dialog小部件被销毁时,小部件将自动取消注册事件处理程序,从而检查内存配置文件。
答案 1 :(得分:0)
我发现这样做的一种方法是向窗口小部件添加延迟连接
dojo.connect(this.current_popup, "onDownloadEnd", function(){
dojo.query("a.popup",this.current_popup).forEach(function(node) {
// add your function add here
});
});
这在ajax调用完成后运行,因此您现在可以在DOM中找到对象