我有一个按钮和一个div下面,按钮必须显示这个div onclick,我写了这个功能,一切都很好,但它只适用于第二次点击,我无法弄清楚原因,这里是我的代码:
function showDiv() {
var x = document.getElementById('myDiv');
if (x.style.display === 'none') {
x.style.display = 'block';
} else {
x.style.display = 'none';
}
}

#myDiv{
display: none;
}

<button type="button" class="btn btn-default" onclick="showDiv()">Show div</button>
<div id="myDiv">
test
test
test
test
test
test
</div>
&#13;
答案 0 :(得分:2)
要获取通过样式表(或块)应用的值,您需要使用getComputedStyle()
。 document.getElementById('myDiv').style.display
只能读取内联样式。
function showDiv() {
var x = document.getElementById('myDiv');
if ( window.getComputedStyle(x, null).getPropertyValue("display") === 'none') {
x.style.display = 'block';
} else {
x.style.display = 'none';
}
}
&#13;
#myDiv{
display: none;
}
&#13;
<button type="button" class="btn btn-default" onclick="showDiv()">Show div</button>
<div id="myDiv">
test
test
test
test
test
test
</div>
&#13;
答案 1 :(得分:1)
你已经在css中设置了样式。所以x.style.display
的值最初不是none.it wolud是空的。所以最初设置那个样式。或使用getComputedStyle
获取CSS规则
function showDiv() {
var x = document.getElementById('myDiv');
if (x.style.display === 'none') {
x.style.display = 'block';
} else {
x.style.display = 'none';
}
}
&#13;
#myDiv{
display: none;
}
&#13;
<button type="button" class="btn btn-default" onclick="showDiv()">Show div</button>
<div id="myDiv" style="display:none;">
test
test
test
test
test
test
</div>
&#13;
如果元素的显示被继承或由CSS规则指定,请使用getComputedStyle计算样式
function showDiv() {
var x = document.getElementById('myDiv');
if (getComputedStyle(x, null).display === 'none') {
x.style.display = 'block';
} else {
x.style.display = 'none';
}
}
&#13;
#myDiv{
display: none;
}
&#13;
<button type="button" class="btn btn-default" onclick="showDiv()">Show div</button>
<div id="myDiv">
test
test
test
test
test
test
</div>
&#13;
答案 2 :(得分:0)
因为div没有显示风格。您可以手动添加它:
function showDiv() {
var x = document.getElementById('myDiv');
if (x.style.display === 'none') {
x.style.display = 'block';
} else {
x.style.display = 'none';
}
}
&#13;
#myDiv{
display: none;
}
&#13;
<button type="button" class="btn btn-default" onclick="showDiv()">Show div</button>
<div id="myDiv" style='display:none'>
test
test
test
test
test
test
</div>
&#13;
答案 3 :(得分:0)
您的代码存在的问题是x.style.display
与您的元素内联的display
属性相对应。它会忽略您的CSS选择器,这意味着第一次运行函数时x.style.display === 'none'
为false。
内联display:none
可以解决您的问题:
<div id="myDiv">...</div> → → → <div id="myDiv" style="display:none;">...</div>
但是,这不是推荐的方法。获得所需结果的更好方法是切换课程:
document.getElementById('myButton').addEventListener('click', function() {
document.getElementById("myDiv").classList.toggle('hidden');
});
&#13;
.hidden {
display: none;
}
&#13;
<button id="myButton" type="button" class="btn btn-default">Show div</button>
<div id="myDiv" class="hidden">test test test test test test</div>
&#13;
答案 4 :(得分:-1)
设置CSS样式不会渗透到x.style.display
所以当您第一次点击x.style.display
实际上等于""
时,它会点击您的其他块并将style.display
设置为none
,第二次,它击中条件的第一个分支并显示你的div。
使用computedStyle
来获取实际样式,或者使用类会更容易。
JS:
function show () {
var x = document.querySelector('#myDiv')
x.classList.toggle('show')
}
CSS:
.show {
display: 'block';
}
Classlist
,但是一些非常旧的浏览器会遇到困难,尽管存在良好的polyfill。