javascript - 我必须单击两次才能使 div 可见。怎么解决?

标签 javascript jquery html css

var divs = ["userMenu", "submenu"];
var visibleDivId = null;

function toggleVisibility(divId) {
    if (visibleDivId == divId) {
        visibleDivId = null;
    } else {
        visibleDivId = divId;
    }
    hideNonVisibleDivs();
}

function hideNonVisibleDivs() {
    var i, divId, div;
    for (i = 0; i < divs.length; i++)
    {
        divId = divs[i];
        div = "#" + document.getElementById(divId).id;
        if (visibleDivId == divId) 
            $(div).fadeIn();
        else 
            $(div).fadeOut();
    }
}

第一次它工作得很好。但是,当我在单击将关闭 div 的 a 元素后尝试打开同一个 div 时,我必须单击它两次。我明白了为什么,第一次点击 div 时,visisbleDivId 与 divId 相同,因此 visibleDivId 将被设置为 null。第二次点击,它将淡出,因为它不再与 divId 相同。

我知道出了什么问题,但我不知道如何解决。

最佳答案

您不需要那个额外的功能。因为你在“visibleDivId”中存储了哪个 div 是可见的,所以你只需要隐藏那个 div 而不需要循环遍历其他 div。

var divs = ["userMenu", "submenu"];
var visibleDivId = null;

function toggleVisibility(divId) {
    if (visibleDivId == divId) {
        $(visibleDivId).fadeOut();
        visibleDivId = null;
    } else {
        if (visibleDivId) {
            $(visibleDivId).fadeOut();
        }
        visibleDivId = divId;
        $(visibleDivId).fadeIn();
    }
}

关于javascript - 我必须单击两次才能使 div 可见。怎么解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32971083/

相关文章:

javascript - 从 Deferred.Done 检索返回值

javascript - Yii2 中的 Ajax + Controller 操作

javascript - jQuery Slidedown 如何在显示之前获取隐藏项的最终高度?

javascript - 在不同文件中使用 Javascript 获取表单数据

javascript - 如何生成没有重复的随机链接

javascript - 如何在 React Native ListView 中将项目居中?

javascript - 从匹配中获取找到的值(正则表达式)

javascript - IE8 和 javascript 对象属性、文本

javascript - jQuery 消息验证器无法正常工作

javascript - 将 X 轴添加到 No Scroll Refresh