点击SearchBar时打开下拉菜单的实现问题求助
解决方案
1. 实现openDropDown函数触发select下拉
你的输入框绑定了onclick="openDropDown()"但未实现该函数,原生<select>的下拉展开无法通过类切换实现,需触发DOM事件完成。添加以下函数:
function openDropDown() { const selectElement = document.getElementById('uni_name_drpdwn'); // 模拟点击事件触发下拉展开 const clickEvent = new MouseEvent('mousedown', { bubbles: true }); selectElement.dispatchEvent(clickEvent); }
2. 移除无效代码并保留过滤逻辑
删除filterFunction中对myDropdown的类切换代码(该操作对select下拉无作用),修改后的过滤函数如下:
function filterFunction() { var input, filter, div, options, i; input = document.getElementById("myInput"); filter = input.value.toUpperCase(); div = document.getElementById("myDropdown"); options = div.getElementsByTagName("option"); for (i = 0; i < options.length; i++) { const txtValue = options[i].textContent || options[i].innerText; if (txtValue.toUpperCase().indexOf(filter) > -1) { options[i].style.display = ""; } else { options[i].style.display = "none"; } } }
3. 可选:优化交互联动
若希望点击输入框时先展开下拉再执行过滤(比如输入框为空时显示所有选项),可在openDropDown中调用过滤函数:
function openDropDown() { const selectElement = document.getElementById('uni_name_drpdwn'); const clickEvent = new MouseEvent('mousedown', { bubbles: true }); selectElement.dispatchEvent(clickEvent); // 触发过滤确保显示匹配选项 filterFunction(); }
关键说明
- 原生
<select>的下拉行为由浏览器控制,无法通过CSS类直接切换展开/收起,必须通过触发事件实现。 - 你当前的过滤逻辑通过修改
option的display属性控制显示,在原生select中有效,展开后只会展示未被隐藏的选项。
内容的提问来源于stack exchange,提问作者Kez XI
相关产品推荐
相关产品推荐

