我正在使用jQuery v1.8.3和jQuery UI v1.9.2。
在click
的{{1}}我想要一个菜单(通过button
)隐藏它是否已打开,或显示它是否已关闭,所以我选择使用{{ 3}}函数是ul
,click
上最基本的形式。很简单,例如
toggle()
(这是coffeescript,但你得到了要点)
实际发生的情况是,当首先显示button.click =>
autocomplete = input_field.data("ui-autocomplete")
menu = autocomplete.menu
ul = menu.element
ul.toggle()
时(不是通过按钮),它具有显示属性集,显示属性设置为ul
。
然后,如果我在点击功能中检查显示属性的当前状态是通过,则首次单击该按钮:
display: block
输出是:
display = none
display = block
因此,由于某种原因,该物业最初被错误地拾取。
它将显示属性添加为 console.log "display = #{ul.css('display')}"
ul.toggle()
console.log "display = #{ul.css('display')}"
,然后在下一个点击集display: block
上添加。
我无法直接控制display: none
toggle呈现ul
,我并不热衷于对此进行捣乱。
这是预期的行为,解决此问题的最佳方法是什么?我正在考虑将函数传递给click
,检查是否有显示attr设置,然后显示或隐藏依赖于此,但如果有更简单的方法或更好的功能,可能是更新版本的切换,那么请告诉我。在我看来,jQuery文档是任何技术项目中最糟糕的一些,所以我认为我很可能完全使用了错误的函数。
非常感谢任何帮助。
答案 0 :(得分:0)
在页面加载时设置显示属性。像
这样的东西$(function(){
$("ul").hide();
});
呈现自动填充后。
这将设置display:none使用.show()
使其成为display:block
答案 1 :(得分:0)
toggle
也应该有效。有关示例,请参阅this jsfiddle。要检查的一件事是你在$(function() { ... });
答案 2 :(得分:0)
你说你在页面第一次加载时会看到li,如果这是预期的行为那么很棒 - 无论哪种方式都无关紧要。我创建了这个JS小提琴http://jsfiddle.net/r0k3t/Rcpet/去那里尝试一下,无论CSS在第一次加载页面时将display属性设置为block还是none,切换工作正常。如果您发布了更多代码,那么更容易看到您想要完成的内容,但很难从描述中知道问题的位置,您可能会遇到一个简单的语法错误,但我们无法看到。无论如何 - 这是与JS小提琴相同的代码。
<a href="#" id="toggleButton">Toggle li element</a>
<ul>
<li>You can see me now</li>
</ul>
//Here is the JS wired up in document load
function toggleLi() {
$("ul li").toggle();
}
$("#toggleButton").click(toggleLi);
/* Here is the CSS */
ul li {
display: block; /*change to none and test - works as well */
}
答案 3 :(得分:0)
检查此代码
<!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
</script>
<script>
$(document).ready(function(){
$("#show").click(function(){
$("ul").toggle();
});
});
</script>
<style>
ul {display:none;}
</style>
</head>
<body>
<button id="show">Show</button>
<ul>
<li>aaaa </li>
<li>bbbb </li>
<li>ccccccc </li>
</ul>
</body>
</html>