gpt4 book ai didi

javascript - 通过单击外部关闭 Dojo 对话框

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:52:35 25 4
gpt4 key购买 nike

我使用的是 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._underlay 返回说它未定义。我缺少什么来实现这一点,或者是否有更简单的方法来做到这一点?

更新 我更新了有效的代码,但只有在我在其中一个对话框中调用 .show 后它才有效,然后它就全是肉汁了。在至少显示一个对话框之前,似乎不会创建底层。

最佳答案

这么快就弄明白了,我觉得很傻。诀窍是,dijit._underlay 在您第一次调用对话框的 .show() 之前不会初始化。之后,它将重新使用 dijit._underlay。但是,您可以自己动手做同样的技巧。因此,我检查 dijit._underlay 是否存在。但是,如果没有创建它,我会创建它,所有对话框都会关闭这个对话框。所以,这是工作代码:

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();
}
}
}
});
});

关于javascript - 通过单击外部关闭 Dojo 对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9219428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com