我有一个用于菜单的显示/隐藏脚本。当我点击主链接时,它会在其下方显示一个列表。我想知道是否有一种方法可以改变它,以便当我点击它打开的链接时,但是当我点击下一个它关闭另一个而不是让它们全部打开,除非你再次点击它关闭。
这是我的剧本:
<script type="text/javascript">
function toggle_visibility(id) {
var e = document.getElementById(id);
if(e.style.display == 'block')
e.style.display = 'none';
else
e.style.display = 'block';
}
</script>
<a href="#" onclick="toggle_visibility('list1');">
<p>List One</p>
</a>
<div id="list1" style="display:none;">
<ul>
<li>Item One</li>
<li>Item Two</li>
<li>Item Three</li>
</ul>
</div>
答案 0 :(得分:17)
假设这是您的代码:
<a href="#" onclick="toggle_visibility('list1');">
<p>List One</p>
</a>
<div id="list1" style="display:none;">
<ul>
<li>Item One</li>
<li>Item Two</li>
<li>Item Three</li>
</ul>
</div>
<a href="#" onclick="toggle_visibility('list2');">
<p>List Two</p>
</a>
<div id="list2" style="display:none;">
<ul>
<li>Item One</li>
<li>Item Two</li>
<li>Item Three</li>
</ul>
</div>
将其更改为:
<a href="#" onclick="toggle_visibility('list1');">
<p>List One</p>
</a>
<div id="list1" class="alist" style="display:none;">
<ul>
<li>Item One</li>
<li>Item Two</li>
<li>Item Three</li>
</ul>
</div>
<a href="#" onclick="toggle_visibility('list2');">
<p>List Two</p>
</a>
<div id="list2" class="alist" style="display:none;">
<ul>
<li>Item One</li>
<li>Item Two</li>
<li>Item Three</li>
</ul>
</div>
并制作你的JavaScript:
function toggle_visibility(id) {
var list = document.getElementsByClassName("alist");
for (var i = 0; i < list.length; i++) {
list[i].style.display = 'none';
}
var e = document.getElementById(id);
if(e.style.display == 'block') {
e.style.display = 'none';
} else {
e.style.display = 'block';
}
}
这是JSFiddle。
我建议您使用jQuery而不是使用纯JavaScript。
以下是我在jQuery中的表现:
function toggle_visibility(id) {
$(".list").hide();
$("#" + id).toggle();
}
答案 1 :(得分:6)
我会再添加一个函数来隐藏所有列表但只有一个当前:
function toggle_visibility(id) {
var e = document.getElementById(id);
if (e.style.display == 'block') e.style.display = 'none';
else e.style.display = 'block';
hideAllBut(id);
}
function hideAllBut(id) {
var lists = document.querySelectorAll('.list');
for (var i = lists.length; i--; ) {
if (lists[i].id != id) {
lists[i].style.display = 'none';
}
}
}