<select> VS 将 div 中的多个按钮制作成下拉列表



在HTML中,使用内部有子<option><select>标记与使用有许多子按钮的<div><button>有什么区别?

Smth like(不要介意选项不同,概念是关键(:

<select name="dog-names" id="dog-names">
<option value="rigatoni">Rigatoni</option>
<option value="dave">Dave</option
<option value="pumpernickel">Pumpernickel</option>
</select>

与类似smth的代码相比:

/* When the user clicks on the button, 
toggle between hiding and showing the dropdown content */
function myFunction() {
document.getElementById("myDropdown").classList.toggle("show");
}
// Close the dropdown if the user clicks outside of it
window.onclick = function(event) {
if (!event.target.matches('.dropbtn')) {
var dropdowns = document.getElementsByClassName("dropdown-content");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
.dropbtn {
background-color: #3498DB;
color: white;
padding: 16px;
font-size: 16px;
border: none;
cursor: pointer;
}
.dropbtn:hover, .dropbtn:focus {
background-color: #2980B9;
}
.dropdown {
position: relative;
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f1f1f1;
min-width: 160px;
overflow: auto;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
}
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown a:hover {background-color: #ddd;}
.show {display: block;}
<h2>Clickable Dropdown</h2>
<p>Click on the button to open the dropdown menu.</p>
<div class="dropdown">
<button onclick="myFunction()" class="dropbtn">Dropdown</button>
<div id="myDropdown" class="dropdown-content">
<a href="#home">Home</a>
<a href="#about">About</a>
<a href="#contact">Contact</a>
</div>
</div>

不同之处在于,<select>标记在<form>标记中使用时最有用(即:数据正在发送到服务器(。在一个只有JS的应用程序中,你可以使用<select>,但定制下拉列表更有意义。通过这种方式,您可以根据需要对其进行自定义,并添加事件侦听器。

例如,如果您有一个将数据发送到后端的web表单,那么您将不得不使用这样的<select>标签:

<form action="/name.php" method="post">
What is your name?
<select name="dogname">
<option value="Bob">Bob is my name!</option>
<option value="Joe">Joe is my name!</option>
<option value="Jeff">Jeff is my name!</option>
</select>
<input type="submit" value="Submit">
</form>

在该示例中,所选<option>标签的value属性将在名为dogname的参数中发送到服务器。对于HTML表单,这正是我们想要的。

然而,很难自定义此表单的外观,而且它对导航栏等元素也不太有用。如果您想在JavaScript中与下拉列表交互并使用CSS进行样式设置,那么最好使用<div><button>元素。像这样:

/* When the user clicks on the button, 
toggle between hiding and showing the dropdown content */
function myFunction() {
document.getElementById("myDropdown").classList.toggle("show");
}
// Close the dropdown if the user clicks outside of it
window.onclick = function(event) {
if (!event.target.matches('.dropbtn')) {
var dropdowns = document.getElementsByClassName("dropdown-content");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
.dropbtn {
background-color: #3498DB;
color: white;
padding: 16px;
font-size: 16px;
border: none;
cursor: pointer;
}
.dropbtn:hover, .dropbtn:focus {
background-color: #2980B9;
}
.dropdown {
position: relative;
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f1f1f1;
min-width: 160px;
overflow: auto;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
}
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown a:hover {background-color: #ddd;}
.show {display: block;}
<h2>Clickable Dropdown</h2>
<p>Click on the button to open the dropdown menu.</p>
<div class="dropdown">
<button onclick="myFunction()" class="dropbtn">Dropdown</button>
<div id="myDropdown" class="dropdown-content">
<a href="#home">Home</a>
<a href="#about">About</a>
<a href="#contact">Contact</a>
</div>
</div>

正如您在上面的代码片段中看到的,下拉列表看起来更好,更适合非表单元素。但是,所选的<button>元素不会像第一个片段中那样发送到任何服务器。对于导航栏来说,这正是我们想要的。

最新更新