Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过单击Dojo对话框外部来关闭该对话框_Javascript_Dialog_Dojo - Fatal编程技术网

Javascript 通过单击Dojo对话框外部来关闭该对话框

Javascript 通过单击Dojo对话框外部来关闭该对话框,javascript,dialog,dojo,Javascript,Dialog,Dojo,我使用的是Dojo 1.6.1,我希望通过单击对话框外部来关闭Dojo对话框。经过研究,实现这一目标最简单的方法之一似乎是这样做: var dij = dijit._underlay.domNode; dojo.connect(dij, "onclick", function(e) { dojo.query('[role="dialog"]').forEach(function(element) { if (element.className.match("dijit"

我使用的是Dojo 1.6.1,我希望通过单击对话框外部来关闭Dojo对话框。经过研究,实现这一目标最简单的方法之一似乎是这样做:

var dij = dijit._underlay.domNode;
dojo.connect(dij, "onclick", function(e) { 
    dojo.query('[role="dialog"]').forEach(function(element) {
        if (element.className.match("dijit")) {
            if(element.id)
            {
                var widget = dijit.byId(element.id);
                if(widget._isShown() === true)
                {
                    widget.hide();  
                }
            }
        }
    });
});
但是,这不起作用,因为dijit.\u underlay返回时说它未定义。我缺少什么来完成这一点,或者有更简单的方法来完成这一点


更新我更新了有效的代码,但它只有在我打电话后才有效。在我的一个对话框中显示,然后在文字后面它就是肉汁。至少显示一个对话框后,才创建参考底图。

如果可以打开多个对话框,则表示它们相互嵌套并触发。 但每次打开新对话框时,只有一个参考底图被重新定位(zIndex)。 使用控制器类型的小部件“存储”每个对话框实例可能是个好主意。 类似于dialogList属性,您将在其中推送新对话框。 然后单击参考底图,隐藏从列表中最后一个开始的对话框。 我认为,当你试图像你一样一般地隐藏它们时,“顺序”是很重要的。
希望这能有所帮助:)

我觉得这么快就想出来很傻。诀窍是,dijit.\u参考底图在您第一次调用对话框的.show()之前不会初始化。之后,它将重复使用dijit.\u参考底图。然而,你也可以在自己面前耍同样的把戏。因此,我检查dijit.\u参考底图是否存在。但是,如果它没有被创建,我会这样做,所有的对话框都会关闭这个对话框。下面是工作代码:

var dij = null;
if(dijit._underlay === undefined)
{
    dijit._underlay = new dijit.DialogUnderlay();
}
dij = dijit._underlay.domNode;
dojo.connect(dij, "onclick", function(e) { 
    dojo.query('[role="dialog"]').forEach(function(element) {
        if (element.className.match("dijit")) {
            if(element.id)
            {
                var widget = dijit.byId(element.id);
                if(widget._isShown() === true)
                {
                    widget.hide();  
                }
            }
        }
    });
});

您也可以尝试使用TooltipDialog。它有一个不同的用户界面,但是它的行为和你想要的很接近。谢谢你的建议!我更新了我的问题,加入了我发现的更多启示。