如何通过ID分别获取多个input字段值并找出最大值
问题根因
原有代码存在3个核心问题,导致无法拿到正确数值数组、循环逻辑异常:
- 动态生成的结果区块如果是div、span这类普通展示标签,本身不存在value属性,jQuery的
.val()方法仅能读取input/select/textarea这类表单控件的值,直接调用会返回空值 - 循环逻辑编写错误:终止条件设为
i<=largest,初始largest值为0,循环最多执行1次就会终止,且循环内部重复用var声明largest会触发变量提升,打乱执行逻辑 - 从DOM读取的内容默认是字符串类型,未做数值转换时会按字符串规则做比较,计算结果完全不符合数值对比预期
可直接运行的修复代码
// 同时监听值变化、内容变化事件,覆盖动态内容更新场景 $('#field_wyepk, #field_wyepk2, #field_wyepk3 , #field_wyepk32').on('change input DOMSubtreeModified', function(){ // 通用取值方法:优先读取表单value,无value则读取元素文本,自动转换为数值 const getBlockScore = (selector) => { const $el = $(selector); const rawValue = $el.val() || $.trim($el.text()); return Number(rawValue) || 0; } // 分别读取4个区块的分数 const commerceScore = getBlockScore("#field_wyepk"); const scitechScore = getBlockScore("#field_wyepk2"); const humanitiesScore = getBlockScore("#field_wyepk3"); const eduScore = getBlockScore("#field_wyepk32"); // 目标纯数值数组,输出格式与[71, 85, 76, 56]完全一致 const scoreArray = [commerceScore, scitechScore, humanitiesScore, eduScore]; console.log(scoreArray); // 直接读取数组最大值,无需手写循环 const maxScore = Math.max(...scoreArray); console.log('最大值:', maxScore); // 后续自定义业务逻辑可在此处编写 })
使用说明
- 如果结果区块是表单控件,只是动态赋值时未同步value属性,代码内的兼容逻辑也可以正常读取文本内的数值
- 最终得到的
scoreArray是标准数值数组,可直接用于后续业务计算 - 代码已添加
DOMSubtreeModified监听,只要元素内容发生变化就会重新计算,覆盖框架动态渲染不触发常规change事件的场景 - 求数组最大值优先使用原生
Math.max()配合ES6展开运算符,写法更简洁稳定,可避免手写循环的逻辑错误
内容的提问来源于stack exchange,提问作者BLESSING
相关产品推荐
相关产品推荐

