<select> 用于创建下拉选择列表,允许用户从预定义选项中选择一个或多个值。
一、基本语法与属性
| 属性 | 说明 | 示例值 |
|---|---|---|
| name | 表单提交时的字段名称 | name="city" |
| id | 用于JavaScript或CSS选择 | id="countrySelect" |
| multiple | 允许多选(布尔属性) | multiple |
| size | 显示的行数(默认为1) | size="5" |
| disabled | 禁用(布尔属性) | disabled |
| required | 必填字段(布尔属性) | required |
| autofocus | 页面加载时自动获得焦点 | autofocus |
| form | 指定所属表单的id | form="myForm" |
二、<option> 子标签属性
| 属性 | 说明 | 示例值 |
|---|---|---|
| value | 选项对应的值(表单提交时使用) | value="bj" |
| selected | 默认选中(布尔属性) | selected |
| disabled | 禁用该选项(布尔属性) | disabled |
| label | 选项的简短标签 | label="北京" |
三、基础使用实例
<!-- 基础单选下拉框 -->
<label for="city">选择城市:</label>
<select id="city" name="city">
<option value="">请选择城市</option>
<option value="bj">北京</option>
<option value="sh" selected>上海</option>
<option value="gz">广州</option>
<option value="sz">深圳</option>
</select>
四、<optgroup> 分组使用
<label for="car">选择汽车品牌:</label>
<select id="car" name="car">
<optgroup label="德系车">
<option value="benz">奔驰</option>
<option value="bmw">宝马</option>
<option value="audi">奥迪</option>
</optgroup>
<optgroup label="日系车">
<option value="toyota">丰田</option>
<option value="honda">本田</option>
<option value="nissan">日产</option>
</optgroup>
<optgroup label="美系车" disabled>
<option value="ford">福特</option>
<option value="chevrolet">雪佛兰</option>
</optgroup>
</select>
五、多选实例
<!-- 多选列表框 -->
<label for="hobbies">选择兴趣爱好(按住Ctrl可多选):</label><br>
<select id="hobbies" name="hobbies[]" multiple size="6">
<option value="reading">阅读</option>
<option value="music" selected>音乐</option>
<option value="sports" selected>运动</option>
<option value="travel">旅行</option>
<option value="gaming">游戏</option>
<option value="cooking">烹饪</option>
</select>
<p>提示:Windows按住Ctrl键多选,Mac按住Command键多选</p>
六、JavaScript操作实例
<select id="province" name="province">
<option value="">请选择省份</option>
</select>
<button onclick="addOption()">添加选项</button>
<button onclick="getSelectedValue()">获取选中值</button>
<button onclick="removeOption()">删除选中项</button>
<script>
// 动态添加选项
function addOption() {
const select = document.getElementById('province');
const newOption = document.createElement('option');
newOption.value = 'zj';
newOption.text = '浙江省';
select.appendChild(newOption);
}
// 获取选中值
function getSelectedValue() {
const select = document.getElementById('province');
const selectedValue = select.value;
const selectedText = select.options[select.selectedIndex].text;
alert(`值:${selectedValue}, 文本:${selectedText}`);
}
// 删除选中项
function removeOption() {
const select = document.getElementById('province');
if (select.selectedIndex > 0) {
select.remove(select.selectedIndex);
}
}
// 多选值获取示例
function getMultipleValues() {
const multiSelect = document.getElementById('hobbies');
const selectedValues = [];
for (let i = 0; i < multiSelect.options.length; i++) {
if (multiSelect.options[i].selected) {
selectedValues.push(multiSelect.options[i].value);
}
}
console.log('多选值:', selectedValues);
}
</script>
七、常见应用场景
| 场景 | 代码示例 | 说明 |
|---|---|---|
| 表单选择 | <select name="gender" required> <option value="">请选择性别</option> <option value="male">男</option> <option value="female">女</option> <option value="other">其他</option> </select> | 表单中的必填选择项 |
| 级联选择 | <select id="province" onchange="loadCities()"> <option value="js">江苏省</option> <option value="zj">浙江省</option> </select> <select id="city"> <option>请先选择省份</option> </select> | 第一个选择框变化时动态加载第二个 |
| 数据筛选 | <select id="sort" onchange="sortProducts()"> <option value="default">默认排序</option> <option value="price_asc">价格从低到高</option> <option value="price_desc">价格从高到低</option> <option value="sales">按销量排序</option> </select> | 用于商品列表的排序筛选 |
| 状态选择 | <select name="status"> <option value="pending">待处理</option> <option value="processing">处理中</option> <option value="completed">已完成</option> <option value="cancelled">已取消</option> </select> | 工作流或任务状态选择 |
八、注意事项与最佳实践
- 默认选项:建议第一个选项作为提示项,值为空字符串
- 多选处理:多选时name属性建议使用数组形式(如name="hobbies[]")
- 选项数量:选项过多时考虑使用搜索功能或分组显示
- 表单验证:使用required属性时,默认选中项应有有效值
- 移动端适配:移动设备上会调用原生选择器,样式可能不一致
- 性能考虑:避免一次性加载过多选项(超过100条)
九、与CSS样式结合技巧
<style>
/* 基础样式 */
.custom-select {
padding: 8px 12px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 14px;
background-color: white;
width: 200px;
appearance: none; /* 移除默认箭头 */
background-image: url('data:image/svg+xml;utf8,');
background-repeat: no-repeat;
background-position: right 8px center;
padding-right: 30px;
}
.custom-select:focus {
outline: none;
border-color: #3498db;
box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2);
}
.custom-select:disabled {
background-color: #f5f5f5;
color: #999;
cursor: not-allowed;
}
</style>
<select class="custom-select">
<option>选项1</option>
<option>选项2</option>
</select>
十、兼容性说明
- 所有主流浏览器都支持<select>标签
- HTML5新增属性(如required、autofocus)在IE9及以下版本不支持
- appearance属性在不同浏览器中可能需要前缀(-webkit-appearance, -moz-appearance)
- 移动端样式会使用设备原生控件
总结: <select>是HTML表单中创建选择列表的标准控件,通过合理使用单选、多选、分组等功能,结合JavaScript动态操作,可以构建出功能丰富、用户体验良好的选择界面。
❤️收藏 👍点赞
用户评论
发表评论