jQuery SlideDown后元素css Height返回1

时间:2018-09-03 08:55:57

标签: javascript jquery css

在下面一行中的javascript中,应该在slideDown() /可见状态下找到dropdown-container元素的高度。但是,当单击按钮并且下拉列表将返回的高度扩展为1时,它似乎在做相反的事情(我已经通过取消注释函数末尾的行来对其进行测试)。当再次单击按钮以折叠下拉菜单时,高度为681。为什么这种情况?当单击按钮以展开下拉容器时,在此功能内有什么方法可以正确评估展开的高度吗?

$(this).next(".dropdown-container").css("height")

以下是完整的javascript:

$(document).ready(function () {
    var dropdown = $(".dropdown-btn");
    var i;

    for (i = 0; i < dropdown.length; i++) {
        dropdown[i].addEventListener("click", function () {
            $(".dropdown-btn").not(this).removeClass("active");
            $(".dropdown-container").slideUp();
            $(this).toggleClass("active");
            if ($(this).hasClass("active")) {
                $(this).next(".dropdown-container").slideDown();
                if (Modernizr.mq('(max-height: 750px)') || $(this).next(".dropdown-container").css("height").replace(/px/, "") > ($(document).height() - 132 - 176)) {
                    $(".dropdown-btn").not(this).slideUp();
                }
            }
             else {
                    $(".dropdown-btn").not(this).slideDown();
            }

//$('a').text($(this).next(".dropdown-container").css("height").replace(/px/, ""));
});

1 个答案:

答案 0 :(得分:0)

根据上面的评论,需要在回调函数(这是slideDown方法中的第二个选项)中评估高度。随着代码的移动,this逻辑也需要更新为相对于容器而不是按钮。以下是已更新的代码:

if ($(this).hasClass("active")) {
    $(this).next(".dropdown-container").slideDown("slow", function() {
        // Animation complete.
        if (Modernizr.mq('(max-height: 750px)') || $(this).css("height").replace(/px/, "") > ($(document).height() - 132 - 176)) {
            $(".dropdown-btn").not($(this).prev(".dropdown-btn")).slideUp();
        }
    });
}