Javascript 切换按钮:将操作顺序从 show/hide 更改为 hide/show
Javascript toggle button: change action sequence from show/hide to hide/show
我在 w3schools、
找到了以下脚本
<script>
var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
});
}
</script>
为了制作文本框的切换按钮。问题是 脚本最初显示文本框然后隐藏它。我想先隐藏再显示。否则 最初的第一次点击不会做任何事情,所以用户会认为按钮坏了。
为了解释更多,我将它与
一起使用
<button type="button" class="collapsible">Toggle document map</button>
<div class="content">
<p>bla..bla</p>
</div>
和以下 css
.
.active, .collapsible:hover {
background-color: #8511ae;
color: white; font-weight: bold; text-decoration: underline;
}
.collapsible {
background-color: #faf9d8;
color: #4e3fe3; font-style: italic; font-weight: bold;
font-family: verdana, sans-serif;
cursor: pointer;
padding: 5px;
width: 35%;
float: left
border: 0px solid #8511ae;
text-align: center;
outline: none;
font-size: 15px;
margin-top: 2%;
margin-bottom: 0%;
margin-left: 2%;
margin-right: 24%;
}
.content {
width: 35%;
float: left;
padding: 0px;
border: 0px solid #8511ae;
margin-top: 0%;
margin-bottom: 0%;
margin-left: 2%;
margin-right: 3%;
background-color: #faf9d8;
}
最初content css
来自w3schools,还包括
display: none;
overflow: hidden;
但由于 我希望文本框在访问页面时最初可见,我在 content
css 中留下了以上 2 项].
但是现在,如上所述,我必须单击切换按钮两次 (这是我第一次这样做) 以隐藏文本框。
如何修改上面的 javascript
以便第一次点击隐藏而不是试图使其可见?
我自己尝试了一些更改,但我只是破坏了脚本。这是我制作的第一个网站,如有任何帮助,我们将不胜感激。
只需使用:
if (content.style.display === "none") {
content.style.display = "block";
} else {
content.style.display = "none";
}
而不是:
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
这是您的代码:
var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.display === "none") {
content.style.display = "block";
} else {
content.style.display = "none";
}
});
}
.active, .collapsible:hover {
background-color: #8511ae;
color: white; font-weight: bold; text-decoration: underline;
}
.collapsible {
background-color: #faf9d8;
color: #4e3fe3; font-style: italic; font-weight: bold;
font-family: verdana, sans-serif;
cursor: pointer;
padding: 5px;
width: 35%;
float: left
border: 0px solid #8511ae;
text-align: center;
outline: none;
font-size: 15px;
margin-top: 2%;
margin-bottom: 0%;
margin-left: 2%;
margin-right: 24%;
}
.content {
width: 35%;
float: left;
padding: 0px;
border: 0px solid #8511ae;
margin-top: 0%;
margin-bottom: 0%;
margin-left: 2%;
margin-right: 3%;
background-color: #faf9d8;
}
<button type="button" class="collapsible">Toggle document map</button>
<div class="content">
<p>bla..bla</p>
</div>
The style read-only property returns the inline style of an
element in the form of a CSSStyleDeclaration
From HTMLElement.style
documentation
意思是当您使用 content.style.display
(读取或设置它的值)时,您正在执行的是编写 inline 的样式。
由于 <div class="content">
在页面首次加载时没有内联样式,因此您的测试 if (content.style.display === "block")
的计算结果为 false
。它第二次起作用是因为您的第一次点击应用了带有 content.style.display = "block"
.
的块内联样式
修复它的一种方法是简单地手动将内联样式添加到您的 content
元素,如下所示:
<div class="content" style="display:block;">...
以便您的代码可以在您第一次单击按钮时评估为 true
。
正如其他人所说,如果你不想使用内联样式,你可以使用 classList。
我在 w3schools、
找到了以下脚本<script>
var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
});
}
</script>
为了制作文本框的切换按钮。问题是 脚本最初显示文本框然后隐藏它。我想先隐藏再显示。否则 最初的第一次点击不会做任何事情,所以用户会认为按钮坏了。
为了解释更多,我将它与
一起使用 <button type="button" class="collapsible">Toggle document map</button>
<div class="content">
<p>bla..bla</p>
</div>
和以下 css
.
.active, .collapsible:hover {
background-color: #8511ae;
color: white; font-weight: bold; text-decoration: underline;
}
.collapsible {
background-color: #faf9d8;
color: #4e3fe3; font-style: italic; font-weight: bold;
font-family: verdana, sans-serif;
cursor: pointer;
padding: 5px;
width: 35%;
float: left
border: 0px solid #8511ae;
text-align: center;
outline: none;
font-size: 15px;
margin-top: 2%;
margin-bottom: 0%;
margin-left: 2%;
margin-right: 24%;
}
.content {
width: 35%;
float: left;
padding: 0px;
border: 0px solid #8511ae;
margin-top: 0%;
margin-bottom: 0%;
margin-left: 2%;
margin-right: 3%;
background-color: #faf9d8;
}
最初content css
来自w3schools,还包括
display: none;
overflow: hidden;
但由于 我希望文本框在访问页面时最初可见,我在 content
css 中留下了以上 2 项].
但是现在,如上所述,我必须单击切换按钮两次 (这是我第一次这样做) 以隐藏文本框。
如何修改上面的 javascript
以便第一次点击隐藏而不是试图使其可见?
我自己尝试了一些更改,但我只是破坏了脚本。这是我制作的第一个网站,如有任何帮助,我们将不胜感激。
只需使用:
if (content.style.display === "none") {
content.style.display = "block";
} else {
content.style.display = "none";
}
而不是:
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
这是您的代码:
var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.display === "none") {
content.style.display = "block";
} else {
content.style.display = "none";
}
});
}
.active, .collapsible:hover {
background-color: #8511ae;
color: white; font-weight: bold; text-decoration: underline;
}
.collapsible {
background-color: #faf9d8;
color: #4e3fe3; font-style: italic; font-weight: bold;
font-family: verdana, sans-serif;
cursor: pointer;
padding: 5px;
width: 35%;
float: left
border: 0px solid #8511ae;
text-align: center;
outline: none;
font-size: 15px;
margin-top: 2%;
margin-bottom: 0%;
margin-left: 2%;
margin-right: 24%;
}
.content {
width: 35%;
float: left;
padding: 0px;
border: 0px solid #8511ae;
margin-top: 0%;
margin-bottom: 0%;
margin-left: 2%;
margin-right: 3%;
background-color: #faf9d8;
}
<button type="button" class="collapsible">Toggle document map</button>
<div class="content">
<p>bla..bla</p>
</div>
The style read-only property returns the inline style of an element in the form of a CSSStyleDeclaration
From HTMLElement.style
documentation
意思是当您使用 content.style.display
(读取或设置它的值)时,您正在执行的是编写 inline 的样式。
由于 <div class="content">
在页面首次加载时没有内联样式,因此您的测试 if (content.style.display === "block")
的计算结果为 false
。它第二次起作用是因为您的第一次点击应用了带有 content.style.display = "block"
.
修复它的一种方法是简单地手动将内联样式添加到您的 content
元素,如下所示:
<div class="content" style="display:block;">...
以便您的代码可以在您第一次单击按钮时评估为 true
。
正如其他人所说,如果你不想使用内联样式,你可以使用 classList。