如何通过option选项文本设置select2下拉框的选中值?
问题解答
可行性说明
可以通过option的显示文本设置下拉框选中项,你原有实现思路是正确的,问题出在匹配逻辑的细节上。
故障原因
- jQuery的
:contains选择器是大小写严格匹配的:你代码中定义的date_string里月份为大写开头的Setembro,但DOM中对应option的文本是小写开头的setembro,二者无法匹配,最终拿到的val为undefined,给下拉框赋值undefined就会出现选中项清空的问题。 - 原有代码没有做匹配结果校验:没有判断是否找到对应option就直接赋值,匹配失败时就会触发空值写入。
修复方案
方案1:修正匹配文本大小写,和DOM文本保持一致
let date_string = 'quarta-feira, 22 setembro, 2021'; // 查找匹配的option let $targetOption = $('#e_deliverydate').find(`option:contains('${date_string}')`); // 匹配成功再赋值 if ($targetOption.length) { $('#e_deliverydate').val($targetOption.val()).trigger('change'); }
方案2:使用filter实现大小写不敏感匹配,兼容性更强
不用担心拼写时的大小写误差,适用场景更广:
let date_string = 'quarta-feira, 22 Setembro, 2021'; // 自定义匹配逻辑,统一转小写后对比 let $targetOption = $('#e_deliverydate option').filter(function () { return $(this).text().toLowerCase() === date_string.toLowerCase(); }); if ($targetOption.length) { $('#e_deliverydate').val($targetOption.val()).trigger('change'); }
补充说明
select2 4.0.x版本只要触发标准的change事件即可更新下拉框视图,不需要额外加.select2后缀,加了也不会报错,不是本次问题的诱因。
内容的提问来源于stack exchange,提问作者Douglas - 3X Web
相关产品推荐
相关产品推荐

