jquery css函数不适用于检测显示/隐藏的元素

时间:2013-07-23 13:09:07

标签: javascript jquery html dom

我的代码:

<script type="text/javascript">
    $(function(){
        $("body").click(function(){
            $("ul").toggle("slow");
            var b = $("ul").css("display");
            console.log("ul display :"+b);// unfortunately,always returns block!
    });
});
</script>
</head>
<body>
    <nav>
        <ul>
            <li><a href="/">home</a></li>
            <li><a href="/archive/">Archive</a></li>
            <li><a href="/about/">About</a></li>
            <li><a href="/contact/">Contact</a></li>
        </ul>
    </nav>
</body>
</html>

我使用jquery toggle()函数来显示/隐藏。但是toggle()不会改变css值,所以你不能使用.css(“display”)函数来检查display.Even元素是隐藏的,.css(“display”)总是返回“block”,如果您的原始css表定义“display:block;”。

如何检测显示状态,如果元素显示或隐藏?或者,你知道改变toggle()无法实现的实际显示值的方法吗?

注意:您不能使用下面显示的方式,因为前面的代码是测试代码,而在实际代码中,toggle()和.css(“display”)具有不同的功能,并且在完全不同的时间内执行。< / p>

$("ul").toggle("slow", function() {
  ...
}

2 个答案:

答案 0 :(得分:2)

我认为这里的主要问题是代码在检查状态时没有等待动画完成,因此它在运行时实际上仍然可见。

如果在动画完成后检查状态(在回调函数中),它会正确返回none

$("body").click(function(){
    $("ul").toggle("slow", function() {
        var b = $("ul").css("display");
        console.log("ul display :"+b); // This will return none
    });
    var b = $("ul").css("display");
    console.log("ul display :"+b); // This will return block
});

此示例将隐藏元素 - http://jsfiddle.net/Vw9nA/

后立即显示块然后不显示

但正如评论和其他相关问题所述,检查可见性的最佳方法是$('ul').is(':visible')

答案 1 :(得分:0)

$(function(){
  $("body").click(function(){
     $("ul").toggle("slow",function(){
         console.log($(this).css('display')); //none
      });
    });
});