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

下拉框与搜索列表重复选择时添加选中提示功能需求

实现批量转移页面的两个校验需求

没问题,这两个校验需求其实都不难,分两部分来实现就好,我给你写了具体的代码示例,直接套用或者改改就能用:


一、Sub-location下拉框重复选择提示

核心思路是监听两个下拉框的change事件,每次值变动后对比选中值,相同就给出提示(这里用页面内的提示元素比alert更友好,当然你也可以换成弹窗)。

HTML结构示例

<div class="location-group">
  <label>From Sub-location:</label>
  <select id="from-subloc">
    <option value="">请选择源位置</option>
    <option value="s1">试剂库A区</option>
    <option value="s2">试剂库B区</option>
    <option value="s3">临时存储区</option>
  </select>

  <label>To Sub-location:</label>
  <select id="to-subloc">
    <option value="">请选择目标位置</option>
    <option value="s1">试剂库A区</option>
    <option value="s2">试剂库B区</option>
    <option value="s3">临时存储区</option>
  </select>

  <!-- 页面内提示元素,默认隐藏 -->
  <p id="loc-error" style="color: red; display: none; margin-top: 8px;"></p>
</div>

JavaScript实现

// 获取DOM元素
const fromLoc = document.getElementById('from-subloc');
const toLoc = document.getElementById('to-subloc');
const locError = document.getElementById('loc-error');

// 定义校验函数
function checkDuplicateLocation() {
  const fromVal = fromLoc.value;
  const toVal = toLoc.value;

  if (fromVal && toVal && fromVal === toVal) {
    // 显示提示,顺便把选中的文本也展示出来
    locError.textContent = `「${fromLoc.options[fromLoc.selectedIndex].text}」已被选为源位置,请更换目标位置`;
    locError.style.display = 'block';
    // 可选:自动清空目标位置的选择
    // toLoc.value = '';
  } else {
    // 没有重复就隐藏提示
    locError.style.display = 'none';
  }
}

// 给两个下拉框绑定事件
fromLoc.addEventListener('change', checkDuplicateLocation);
toLoc.addEventListener('change', checkDuplicateLocation);

二、Bloodhound搜索列表的试剂重复选择提示

这里需要维护一个集合来记录已选中的试剂(用Set比数组更高效判断是否存在),然后在用户选中搜索结果时做校验。

假设你的Bloodhound和Typeahead已经初始化,在选中事件里加校验

// 存储已选中试剂的唯一ID(用Set避免重复)
const selectedMedIds = new Set();

// 初始化Bloodhound数据源(这里是示例,你可以替换成自己的数据源)
const medicineSource = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  remote: {
    url: '/your-api/medicines?query=%QUERY',
    wildcard: '%QUERY'
  }
});

// 绑定到搜索框
$('#medicineSearchBar').typeahead({
  hint: true,
  highlight: true,
  minLength: 1
}, {
  name: 'medicines',
  display: 'name',
  source: medicineSource,
  templates: {
    suggestion: (data) => `<div>${data.name} (编号: ${data.id})</div>`
  }
}).on('typeahead:selected', function(e, selectedDatum) {
  // 校验是否已选中
  if (selectedMedIds.has(selectedDatum.id)) {
    alert(`试剂「${selectedDatum.name}」已经被选中啦,别重复选哦~`);
    // 可选:清空搜索框的内容
    $(this).typeahead('val', '');
  } else {
    // 加入已选集合
    selectedMedIds.add(selectedDatum.id);
    // 这里可以添加把试剂加入已选列表的逻辑,比如:
    // $('#selected-meds-list').append(`<li>${selectedDatum.name}</li>`);
    console.log('新增选中试剂:', selectedDatum);
  }
});

如果你的搜索列表是自定义的(不是Typeahead默认的下拉),那就在点击搜索结果的事件里做同样的判断:先检查selectedMedIds里有没有当前试剂的ID,有就提示,没有就添加。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:33:53