Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.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代码中的错误_Javascript_Html_Javascript Events - Fatal编程技术网

JavaScript代码中的错误

JavaScript代码中的错误,javascript,html,javascript-events,Javascript,Html,Javascript Events,演示: 该代码的意思是当按下按钮时显示一个弹出窗口,当按下其他任何地方时隐藏它。单击两次按钮时会发生错误。 因此,当反复单击按钮时,代码应该用于显示/隐藏弹出窗口。如果要使其在按钮被隐藏时显示弹出窗口,在按钮被显示时隐藏弹出窗口(并在其他地方单击隐藏弹出窗口),则是这段代码导致了问题: if (ele == element) { hideDropDown(); return; } 您没有向hideDropDown函数传递任何参数。应该是: hideDropDown(ele);

演示:
该代码的意思是当按下按钮时显示一个弹出窗口,当按下其他任何地方时隐藏它。单击两次按钮时会发生错误。

因此,当反复单击按钮时,代码应该用于显示/隐藏弹出窗口。

如果要使其在按钮被隐藏时显示弹出窗口,在按钮被显示时隐藏弹出窗口(并在其他地方单击隐藏弹出窗口),则是这段代码导致了问题:

if (ele == element) {
    hideDropDown();
    return;
}
您没有向hideDropDown函数传递任何参数。应该是:

hideDropDown(ele);

这样,onclick处理程序就被正确地添加到元素中。

如果您想使其在弹出窗口隐藏时显示弹出窗口,在弹出窗口显示时隐藏弹出窗口(并在其他任何地方单击隐藏弹出窗口),则是这段代码导致了问题:

if (ele == element) {
    hideDropDown();
    return;
}
您没有向hideDropDown函数传递任何参数。应该是:

hideDropDown(ele);

这样,onclick处理程序就被正确地添加到元素中。

这似乎是实现此功能的一种非常复杂的方法。您可以使用更少的代码完成此操作,如下所示:

document.onclick = function(e) {
    if (!e) e = window.event;
    var target = e.target || e.srcElement;
    document.getElementById("window").style.display = 
        document.getElementById("but") === target ? "inline-block" : "none";
};
也就是说,单击文档时,检查目标/源元素是否是您的按钮:如果是,则显示弹出窗口,否则将其隐藏

演示:

或者,如果您希望重复单击按钮切换弹出窗口的显示,但单击其他任何位置将其隐藏,只需稍微修改条件:

document.getElementById("window").style.display = 
    document.getElementById("but") === target &&
    document.getElementById("window").style.display === "none" ? "inline-block" : "none";
演示:

编辑:为了迎合您的评论,即点击弹出窗口不应隐藏它,您可以在上述内容之后添加此代码:

document.getElementById("window").onclick = function(e) {
    if (!e) e = window.event;
    if (e.stopPropagation) 
        e.stopPropagation(); // W3C model
    else 
        e.cancelBubble = true; // IE model
};
​
也就是说,防止弹出窗口中的单击冒泡,使它们不会到达执行显示和隐藏的文档级单击处理程序


演示:

这似乎是实现此功能的一种非常复杂的方法。您可以使用更少的代码完成此操作,如下所示:

document.onclick = function(e) {
    if (!e) e = window.event;
    var target = e.target || e.srcElement;
    document.getElementById("window").style.display = 
        document.getElementById("but") === target ? "inline-block" : "none";
};
也就是说,单击文档时,检查目标/源元素是否是您的按钮:如果是,则显示弹出窗口,否则将其隐藏

演示:

或者,如果您希望重复单击按钮切换弹出窗口的显示,但单击其他任何位置将其隐藏,只需稍微修改条件:

document.getElementById("window").style.display = 
    document.getElementById("but") === target &&
    document.getElementById("window").style.display === "none" ? "inline-block" : "none";
演示:

编辑:为了迎合您的评论,即点击弹出窗口不应隐藏它,您可以在上述内容之后添加此代码:

document.getElementById("window").onclick = function(e) {
    if (!e) e = window.event;
    if (e.stopPropagation) 
        e.stopPropagation(); // W3C model
    else 
        e.cancelBubble = true; // IE model
};
​
也就是说,防止弹出窗口中的单击冒泡,使它们不会到达执行显示和隐藏的文档级单击处理程序


演示:

我不能。我已经用纯JavaScript构建了我的整个网站。我无法为单个功能实现库。另一件事是,我想提高我的JavaScript编码技能。这就是我不使用库的原因。好吧。“我看看我能做些什么。”谢谢你。我很感激。我刚刚评论了你写了好几次的事件点击代码。看一看,我猜它的工作正如预期的那样。这些代码意味着当点击按钮时,按钮就像其他元素一样,弹出窗口是可见的。再次单击按钮时,弹出窗口将隐藏。如果没有其他的工作,我会考虑你的解决方案。我用纯JavaScript构建了我的整个网站。我无法为单个功能实现库。另一件事是,我想提高我的JavaScript编码技能。这就是我不使用库的原因。好吧。“我看看我能做些什么。”谢谢你。我很感激。我刚刚评论了你写了好几次的事件点击代码。看一看,我猜它的工作正如预期的那样。这些代码意味着当点击按钮时,按钮就像其他元素一样,弹出窗口是可见的。再次单击按钮时,弹出窗口将隐藏。我将考虑你的解决方案,如果没有另一个工作,只是编辑我的答案基本包括这一点。不错。:)现在,当popup元素包含一组元素时,它就不起作用了。单击弹出窗口时,弹出窗口将消失。好吧,你的问题说了“在其他任何地方按下时隐藏”,弹出窗口在“其他任何地方”的范围内。那么现在你说的要求是在按下按钮或弹出窗口以外的任何位置时隐藏它?好的,我已经更新了我的答案。看看新的演示。我正要编辑我的答案,基本上包括这个。不错。:)现在,当popup元素包含一组元素时,它就不起作用了。单击弹出窗口时,弹出窗口将消失。好吧,你的问题说了“在其他任何地方按下时隐藏”,弹出窗口在“其他任何地方”的范围内。那么现在你说的要求是在按下按钮或弹出窗口以外的任何位置时隐藏它?好的,我已经更新了我的答案。查看新的演示。