【发布时间】:2017-09-02 17:44:17
【问题描述】:
我正在尝试切换 div 的可见性,以便它不会堆叠,而是一次切换一个。切换(虽然堆叠)部分正在工作,代码在底部,但这是我尝试过的(但这对我不起作用):
function toggle_visibility(id) {
var specifiedElement = document.getElementById(id);
document.addEventListener('click', function(event) {
var isClickInside = specifiedElement.contains(event.target);
if (isClickInside) {
if(specifiedElement.style.display == 'block')
specifiedElement.style.display = 'none';
else
specifiedElement.style.display = 'block';
}
else {
if(specifiedElement.style.display == 'block')
specifiedElement.style.display = 'none';
}
});
}
下面是我的代码,它适用于切换,但它目前堆叠的数量与点击次数一样多,最简单的方法是如何检测是否点击了其他切换 ID,然后显示:当前打开的一个或所有预期的无一个点击了,所以两个或更多不能同时打开?
html:
<a href="#" style="margin-right:15px;" onClick="toggle_visibility('a');"> a </a>
<a href="#" style="margin-right:15px;" onClick="toggle_visibility('b');"> b </a>
<a href="#" style="margin-right:15px;" onClick="toggle_visibility('c');"> c </a>
<div class="toggle" id="a" >
a
</div>
<div class="toggle" id="b" style="display:none;">
b
</div>
<div class="toggle" id="c" style="display:none;">
c
</div>
javascript:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
function toggle_visibility(id) {
var e = document.getElementById(id);
if(e.style.display == 'block')
e.style.display = 'none';
else
e.style.display = 'block';
}
</script>
CSS
.toggle {width:100%; background-color:#F00; position:relative;}
由于某种原因,它在小提琴上似乎对我不起作用,但在我的 live 版本上却可以。
【问题讨论】:
-
我也试过这个堆栈切换但不确定如何在单击下一个而不是堆栈时使其关闭全部打开:
function toggle_visibility() { function toggle(id){ var el = document.getElementById(id); el.style.display = el.style.display==='none' ? 'block' : 'none'; } for(var i=0; i<arguments.length; ++i){ toggle(arguments[i]); } }
标签: javascript jquery css toggle