You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 04:33:19