如何让dojo.query返回dijit.Dialog的值

时间:2009-11-26 16:01:17

标签: javascript dojo

我有一些代码,我在其中创建一个带有Ajax调用(href属性)的dijit.Dialog来填充内容。

我要将返回的内容解析为dojo.connect一个click事件到返回内容中的链接。

但是当我做一个dojo.query(“a”,this.current_popup.domNode)时,我得到一个空数组

是否有人知道怎样才能将onclick附加到所有返回的内容?

保罗

2 个答案:

答案 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中找到对象