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

如何实现多个number输入框总和达12时自动禁用剩余输入框

实现方案

以下是原生JavaScript实现代码,可直接替换你现有的逻辑:

const totalMaxQty = 12;
// 获取所有口味对应的数字输入框
const getAllInputs = document.querySelectorAll('.wapf-field-input input[type=number]');

// 初始化:绑定输入事件、设置单输入框上下限
getAllInputs.forEach(input => {
  input.max = totalMaxQty;
  input.min = 0; // 限制最小输入值为0,避免负数
  input.addEventListener('input', handleInputChange);
});

// 输入事件处理函数
function handleInputChange(e) {
  // 校验当前输入值合法性,非数字、负数直接置为0
  const currentVal = parseInt(e.target.value);
  if (isNaN(currentVal) || currentVal < 0) {
    e.target.value = 0;
  }
  // 计算当前总选择数量
  const currentTotal = calcTotal();
  
  // 超过总上限时自动修正当前输入值,保证总数量不超12
  if (currentTotal > totalMaxQty) {
    const overNum = currentTotal - totalMaxQty;
    e.target.value = Math.max(0, parseInt(e.target.value) - overNum);
  }
  
  // 切换输入框禁用状态
  toggleInputsDisable();
}

// 计算所有输入框的总选择数量
function calcTotal() {
  let total = 0;
  getAllInputs.forEach(input => {
    const val = parseInt(input.value);
    total += isNaN(val) ? 0 : val;
  });
  return total;
}

// 控制输入框禁用逻辑
function toggleInputsDisable() {
  const currentTotal = calcTotal();
  getAllInputs.forEach(input => {
    const val = parseInt(input.value) || 0;
    // 总数量达到上限时,仅禁用还未选择的空输入框,已填值的输入框仍可调整
    if (currentTotal >= totalMaxQty) {
      input.disabled = val === 0;
    } else {
      // 总数量未达上限时所有输入框恢复可用
      input.disabled = false;
    }
  });
}

核心逻辑说明

  • 自动处理非法输入:拦截负数、非数字内容,默认转为0
  • 超量自动修正:用户输入导致总数量超过12时,会自动回退当前输入框的数值,保证总数量始终符合盒装规则
  • 灵活禁用逻辑:总数量达到12时,仅禁用未选择的口味输入框,已选择的口味仍可调整数量;调整后总数量低于12时,会自动恢复所有输入框的可用状态

内容的提问来源于stack exchange,提问作者Fleastand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:09:01