Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.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 jQuery向下滑动后,元素css高度返回1_Javascript_Jquery_Css - Fatal编程技术网

Javascript jQuery向下滑动后,元素css高度返回1

Javascript jQuery向下滑动后,元素css高度返回1,javascript,jquery,css,Javascript,Jquery,Css,在下面的javascript中,下一行应该可以找到处于slideDown()/visible状态的下拉容器元素的高度。但是,当单击按钮时,下拉列表会展开,返回的高度为1(我已经通过取消函数末尾的行注释来测试了这一点)。再次单击按钮以折叠下拉列表时,高度为,例如681。为什么会出现这种情况?当单击按钮以展开下拉容器时,是否有任何方法可以在此功能中正确评估展开高度 $(this).next(“.dropdown container”).css(“height”) 以下是完整的javascript:

在下面的javascript中,下一行应该可以找到处于
slideDown()
/visible状态的下拉容器元素的高度。但是,当单击按钮时,下拉列表会展开,返回的高度为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/, ""));
});
$(文档).ready(函数(){
var下拉=$(“.dropdown btn”);
var i;
对于(i=0;i($(document.height()-132-176)){
$(“.dropdown btn”).not(this.slideUp();
}
}
否则{
$(“.dropdown btn”).not(this.slideDown();
}
//$('a').text($(this).next(“.dropdown container”).css(“height”).replace(/px/,”);
});

根据上面的注释,需要在回调函数中评估高度,这是
向下滑动
方法中的第二个选项。当代码移动时,
逻辑也需要更新为相对于容器而不是按钮。下面是更新的代码:

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();
        }
    });
}

因为
slideDown
有点“异步”?在查询其实际高度之前,您必须等待它显示完完整的元素。要添加到上面,这就是为什么
slideX()
方法有一个回调。把你的逻辑放在那里。谢谢你们两位,@rorymcrossan在我更新了
这个
相对于容器而不是按钮的逻辑后,在回调中添加代码起了很大的作用。