
本文介绍如何将原生 html 下拉菜单(`
要让下拉菜单具备“可选中并反馈当前选择”的能力,关键在于:将原本仅用于触发展开的按钮(.dropbtn)转变为动态显示所选内容的“伪选中控件”,同时为每个 选项绑定点击响应逻辑,使其在被点击时不仅关闭菜单,还能将自身文本同步到按钮上。
以下是完整、健壮的实现方案:
✅ 核心 JavaScript 改进点
原始代码中 window.onclick 仅处理菜单收起逻辑,未区分点击目标类型。我们需增强判断逻辑,精准捕获对下拉项(https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bmyDropdown a)的点击,并执行两步操作:
- 关闭下拉面板(移除 .show 类);
- 更新按钮文本为被点击链接的内容。
function dropdownMenu() {
document.getElementById("myDropdown").classList.toggle("show");
}
// 增强版点击事件监听:区分触发源,支持选中反馈
window.onclick = function(event) {
const dropdown = document.getElementById("myDropdown");
const dropbtn = document.querySelector(".dropbtn");
// 点击了下拉项 → 执行选中逻辑
if (event.target.matches("https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bmyDropdown a")) {
dropdown.classList.remove("show");
dropbtn.textContent = event.target.textContent.trim(); // 安全获取并更新文本
}
// 点击了非按钮、非下拉项区域 → 收起菜单
else if (!event.target.matches('.dropbtn') && !dropdown.contains(event.target)) {
dropdown.classList.remove("show");
}
};? 注意:使用 event.target.matches("https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bmyDropdown a") 比 event.target.parentNode === dropdown 更可靠,避免因嵌套结构或空格文本节点导致匹配失败;trim() 可防止前后空白符影响显示。
✅ HTML 结构优化建议(增强可访问性)
为提升语义与无障碍支持,推荐将