jQuery中如何将select元素ID字符串转换为对应变量名并完成赋值
解决方案
你当前代码的问题是拿到id字符串后没有和对应的变量做关联,只是把id字符串和选中值先后赋值给了同一个临时变量,自然无法更新预定义的全局变量,可按以下两种方案调整:
方案1:直接匹配全局变量
浏览器环境下用var声明的全局变量会自动挂载为window对象的属性,你可以用方括号语法通过字符串属性名访问对应的变量,调整后代码如下:
var variable1; var variable2; var variable3; var variable4; var variable5; $("#variable1, #variable2, #variable3, #variable4, #variable5").change(function(){ // 拿到当前select的id作为变量名 const varName = $(this).attr('id'); // 通过window对象访问对应全局变量并赋值 window[varName] = $(this).val(); });
注意:该方案仅适用于全局作用域声明的变量,大量全局变量容易造成命名空间污染。
方案2:用对象统一管理变量(更推荐)
建议将所有需要同步的变量统一放到一个自定义对象中管理,不需要占用全局命名空间,后续新增变量也更方便:
// 自定义对象存储所有对应值 const selectValues = { variable1: '', variable2: '', variable3: '', variable4: '', variable5: '' }; $("#variable1, #variable2, #variable3, #variable4, #variable5").change(function(){ const varName = $(this).attr('id'); // 给对象对应属性赋值 selectValues[varName] = $(this).val(); // 后续调用时直接取 selectValues.variable1 即可 });
优化建议
如果后续可能新增同类select,可以给需要同步的select统一加一个类名,比如sync-select,选择器简化为$('.sync-select'),不需要逐个写ID,可扩展性更强。
内容的提问来源于stack exchange,提问作者trying2code
相关产品推荐
相关产品推荐

