【发布时间】:2014-07-16 04:25:17
【问题描述】:
我正在开发一个允许我打开和关闭弹出内容的菜单。菜单可以通过按下按钮打开,通过再次单击按钮或单击弹出内容容器以外的任何其他位置来关闭。
当我使用我的代码时,我遇到了一个奇怪的问题,在调整窗口大小或更改屏幕方向(例如在平板电脑上)后,然后单击菜单按钮,弹出窗口不会保持打开状态。它会在打开后立即打开和隐藏。
我无法在 jsFiddle 中复制此错误,但我做了一个示例,我使用相同的代码。
为什么我在演示页面上遇到此问题?如何避免?我的代码是否有一些我不知道的限制?
这是一个在每个按钮的点击处理程序上运行的函数。
function mainMenuFunction(eid) {
var num = $(eid).attr('id').substr($(eid).attr('id').length - 1);
var elem = $("#menu-content-" + num);
var parent = $("#menu-item-" + num);
var p = parent.position();
var o = parent.offset();
if (elem.css("display") == "none") {
elem.slideDown();
} else {
elem.slideUp();
}
$(document).click(function (e) {
// position of the menu item
var hstart = o.left;
var hend = o.left + parent.width();
var vstart = o.top;
var vend = o.top + parent.height();
// position of the menu container
var chstart = elem.offset().left;
var chend = elem.offset().left + elem.width();
var cvstart = elem.offset().top;
var cvend = elem.offset().top + elem.height();
if (!(((e.clientX >= hstart) && (e.clientX <= hend)) && ((e.clientY >= vstart) && (e.clientY <= vend)))) {
if (!(((e.clientX >= chstart) && (e.clientX <= chend)) && ((e.clientY >= cvstart) && (e.clientY <= cvend)))) {
elem.slideUp();
}
}
});
}
在 jsFiddle 上,此代码用于在用户调整页面大小时关闭所有菜单。所以我的手机和电脑菜单在切换屏幕时不会乱七八糟。问题不是在调整窗口大小和隐藏菜单内容时菜单关闭,而是在调整窗口大小后,单击菜单会导致打开然后关闭菜单内容。内容未保持打开状态。
$(window).resize(function () {
// PC main menu items
$("#menu-content-1").hide();
$("#menu-content-2").hide();
});
【问题讨论】:
标签: javascript jquery html css popup