selectpicker设置值时出现竞态条件,求原因分析而非解决方案
Bootstrap Selectpicker刷新后选中值失效的原因分析
问题场景
按照常规步骤设置select元素值后调用selectpicker('refresh'),部分环境下最后设置的locale选项无法被正确选中。执行代码如下:
$('[name="city"]', form).val(subscription.city || ''); // <input> $('[name="province"]', form).val(subscription.province); // <select> $('[name="locale"]', form).val(subscription.locale || defaultLocale); // <select> $('select', form).selectpicker('refresh');
将刷新语句包裹在setTimeout中可临时解决问题,但该方案并不稳定,无法保证每次都生效:
setTimeout(function(){ $('select', form).selectpicker('refresh'); }, 10);
存在疑问:上述赋值与方法调用均为基础同步语句,为何会出现需要延迟执行才能生效的情况?
排查进展
- 仅生产环境出现该问题,开发环境无异常
- 已定位到问题根源:生产环境加载的MsDynamics相关脚本干扰了代码执行,注释/移除该脚本后,Selectpicker恢复正常工作
- 当前需进一步排查该MsDynamics脚本中具体哪部分逻辑影响了Selectpicker的刷新机制
内容的提问来源于stack exchange,提问作者gzmo
相关产品推荐
相关产品推荐

