You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

检测select选项重复次数并禁用指定select框的实现求助

解决Select框重复值超过2次时禁用目标Select的问题

首先还原你的场景,你的HTML表单结构如下:

<input class="empcode" type="text"> 
<!-- 这个下拉框的选项从数据库填充,示例数据如下 -->
<select class="select1">
  <option value ="05-2018">05-2018</option>
  <option value ="05-2018">05-2018</option>
  <option value ="06-2018">06-2018</option>
</select>
<select class="result">
  <option value= "1">1</option>
  <option value= "1">1</option>
  <option value= "1">1</option>
</select>

你的需求很明确:当select1下拉框里有任意选项值的重复次数超过2次时,禁用result下拉框。

先说说你写的代码里的几个问题:

  • 选择器错误:HTML里select1是class,但你用了#select1(id选择器),导致无法找到目标元素
  • 语法错误:代码多了冗余的闭合括号,函数结构不完整,alert的位置也不对
  • 逻辑效率低:每次循环都重复查询DOM中的相同值选项,浪费性能

下面是修复后的完整方案:

步骤1:封装重复值检查函数

我们用一个对象来统计每个选项值的出现次数,只需要遍历一次select1的选项就能完成统计,再判断是否有值的计数超过2次:

function checkDuplicatesAndToggleResult() {
  // 获取select1的所有选项
  const options = $('.select1 option');
  // 用对象存储每个value的出现次数
  const valueCount = {};

  // 遍历选项,统计每个值的出现次数
  options.each(function() {
    const val = $(this).val();
    valueCount[val] = (valueCount[val] || 0) + 1;
  });

  // 检查是否有值重复超过2次
  let hasOverDuplicate = false;
  for (const count of Object.values(valueCount)) {
    if (count > 2) {
      hasOverDuplicate = true;
      break;
    }
  }

  // 根据结果禁用或启用result下拉框
  $('.result').prop('disabled', hasOverDuplicate);
}

步骤2:设置函数触发时机

为了确保页面加载时就生效,同时如果select1的选项有动态修改的情况也能实时检查,我们在两个时机调用这个函数:

// 页面加载完成后执行一次
$(document).ready(function() {
  checkDuplicatesAndToggleResult();

  // 如果select1的选项会动态更新,监听change事件实时检查(静态场景可忽略此行)
  $('.select1').on('change', checkDuplicatesAndToggleResult);
});

代码说明

  • valueCount对象统计次数,比反复查询DOM高效很多
  • 通过prop('disabled', 布尔值)来控制result框的禁用状态,这是jQuery控制表单元素禁用的正确方式
  • 统一使用.select1.result的class选择器,匹配HTML结构

把这些代码放到你的页面里,就能实现你想要的效果了。

内容的提问来源于stack exchange,提问作者M.Gooda

火山引擎 最新活动