添加Selectize搜索功能后,带跳转的下拉选框仅显示首个选项的问题
解决Selectize下拉框仅显示单个选项+恢复跳转功能的方案
问题原因
- 重复值被自动过滤:你所有
<option>的value完全相同,Selectize默认会去重,只保留第一个匹配项。 - 原生跳转逻辑失效:Selectize会替换原生下拉框的DOM结构,原来的
onChange事件不再生效。 - 依赖缺失(常见坑):如果没正确引入Selectize的CSS和JS,也会导致渲染异常。
修复步骤
1. 确保引入必要依赖
先在页面里加载jQuery和Selectize的资源(顺序不能乱):
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.15.2/css/selectize.default.min.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.15.2/js/selectize.min.js"></script>
2. 修改HTML与初始化代码
给每个选项设置唯一value(避免去重),同时用Selectize的回调实现跳转:
<select id="select-state" placeholder="Pick a state..."> <option value="">Select a state...</option> <option value="https://example.com/shanghai">Shanghai</option> <option value="https://example.com/germany">Germany</option> <option value="https://example.com/taiwan">Taiwan</option> <option value="https://example.com/singapore">Singapore</option> <option value="https://example.com/hongkong">Hong Kong</option> <option value="https://example.com/mexico">Mexico</option> <option value="https://example.com/netherlands">Netherlands</option> <option value="https://example.com/uk">UK</option> <option value="https://example.com/malaysia">Malaysia</option> <option value="https://example.com/usa">USA</option> <option value="https://example.com/india">India</option> <option value="https://example.com/vietnam">Vietnam</option> </select> <script> jQuery(document).ready(function () { $('#select-state').selectize({ sortField: 'text', // 如果必须保留重复value,打开下面注释(不推荐) // dedupe: false, onChange: function(selectedValue) { // 选中有效链接时跳转 if (selectedValue) { window.location.href = selectedValue; } } }); }); </script>
关键提示
- 优先给每个选项设置唯一
value,既符合HTML语义,也能彻底避免去重问题。 - 必须用Selectize的
onChange回调替代原生事件,因为Selectize会生成新的DOM元素,原生事件无法触发。 - 加载资源时,jQuery一定要在Selectize之前,否则会出现报错。
内容的提问来源于stack exchange,提问作者dh47
相关产品推荐
相关产品推荐

