JavaScript中的一个错误
A bug in a JavaScript
演示:http://jsfiddle.net/nazym/1/
该代码旨在当按下按钮时显示弹出窗口,并在按下其他任何位置时将其隐藏。单击两次按钮时会发生错误
因此,当反复点击按钮时,代码应该可以显示/隐藏弹出窗口。
如果你想让点击按钮在隐藏时显示弹出窗口,在显示时隐藏弹出窗口(点击其他任何地方都会隐藏弹出窗口),那么就是你的代码块导致了问题:
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";
};
也就是说,点击文档,检查目标/源元素是否是您的按钮:如果是,则显示弹出窗口,否则隐藏它。
演示:http://jsfiddle.net/nazym/12/
或者,如果你想反复点击按钮,切换弹出窗口的显示,但点击其他任何地方隐藏,只需稍微修改条件:
document.getElementById("window").style.display =
document.getElementById("but") === target &&
document.getElementById("window").style.display === "none" ? "inline-block" : "none";
演示:http://jsfiddle.net/nazym/13/
编辑:为了迎合您的评论,即点击弹出窗口不应该隐藏它,您可以在上面添加以下代码:
document.getElementById("window").onclick = function(e) {
if (!e) e = window.event;
if (e.stopPropagation)
e.stopPropagation(); // W3C model
else
e.cancelBubble = true; // IE model
};
也就是说,防止弹出窗口中的点击冒泡,这样它们就不会到达显示和隐藏的文档级点击处理程序。
演示:http://jsfiddle.net/nazym/16/
相关文章:
- 我怎么能把一个错误当作未捕获的错误来记录呢
- 在这个使用hasOwnProperty的对象扩展程序中有一个错误,I'我不确定那个bug是什么,也不确定这个扩展
- javascript window.location在检查firebug时给了我一个错误的url路径
- new SharedWorker(“whatever.js”)返回一个错误
- JSON.parse给了我一个错误,但JSONLint说它'是一个有效的json
- 有人能向我解释一下我犯的一个错误吗
- Jasmine:测试setTimeout函数会抛出一个错误
- JavaScript中的一个错误
- 为什么jqPlot显示了一个错误的饼图,其中包含通过AJAX检索的数据
- Webrtc和socket.io:createanswer()总是有一个错误.为什么?我的代码连接了两个对等体,但其中只
- 使用 jQuery 构建一个元素会给我一个错误
- Chai 期望 [函数] 抛出一个(错误)未通过测试(使用 Node)
- 在我的 jquery 函数中得到一个错误
- Addeventlistener 已转换为 IE.也许是另一个错误
- 我有一个错误,由于某种原因,号码被更改了,而不是名字
- 我无法建立离子机器人项目..它给了我一个错误:生成cmd enont
- JQueryAJAX调用:304 respose产生一个错误
- 继续得到一个错误,即某个东西不是函数,但找不到原因
- jQuerylib会导致一个错误,直到刷新为止
- HTML图像加载触发一个错误