作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的代码:
<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的状态。即使元素被隐藏,.css("display")总是返回"block",如果您的原始 css 表定义了“display:block;”。
如何检测显示状态,即元素是显示还是隐藏?或者,你知道如何改变toggle()无法实现的真实显示值吗?
注意:不能使用下面所示的方式,因为前面的代码是测试代码,在实际代码中,toggle() 和 .css("display") 处于不同的函数中,并且执行时间完全不同。
$("ul").toggle("slow", function() {
...
}
最佳答案
我认为这里的主要问题是代码在检查状态时没有等待动画完成,因此它在运行时实际上仍然可见。
如果您在动画完成后检查状态(在回调函数中),它会正确返回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
});
此示例将在隐藏元素后立即显示 block ,然后不显示 - http://jsfiddle.net/Vw9nA/
但正如评论和其他链接问题中所述,检查可见性的最佳方法是 $('ul').is(':visible')
关于javascript - jquery css 函数不适用于检测显示/隐藏的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17811129/
我是一名优秀的程序员,十分优秀!