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

如何用jQuery实现点击搜索下拉列表项填充输入框并关闭列表

jQuery搜索下拉框选中功能修复

问题根因

现有代码无法正常实现选中填充的核心问题有3个:

  • 选中逻辑完全错误:mySelect()方法试图把所有姓名DOM节点插入到input输入框内部,input是单标签元素,不支持嵌套子节点,正确做法是把选中的姓名文本赋值给输入框的value属性
  • 点击选中时没有定位到当前点击的具体项,直接选中了页面上所有.name12元素,无法获取单个选中值
  • 搜索匹配逻辑存在冗余和范围错误:重复做大小写判断,还把「无匹配结果」的提示块当成人员项参与匹配遍历

修复后完整代码

JavaScript部分

var $noResultBlock = $('.no-results');
// 初始隐藏搜索下拉
$(".personsMenu").hide();

$(".my-textbox").keyup(function() {
  const inputVal = $(this).val().trim();
  let hasMatch = false;

  // 输入为空时直接隐藏下拉,终止后续逻辑
  if (!inputVal) {
    $(".personsMenu").hide();
    $noResultBlock.hide();
    return;
  }

  $(".personsMenu").show();
  // 仅遍历人员条目,排除无结果提示
  $(".personsMenu .nm1").each(function() {
    // 统一转小写做匹配,无需重复判断大小写
    const itemText = $(this).text().toLowerCase();
    if (itemText.indexOf(inputVal.toLowerCase()) === -1) {
      $(this).hide();
    } else {
      hasMatch = true;
      $(this).show();
    }
  });

  // 控制无结果提示显隐
  $noResultBlock.toggle(!hasMatch);
});

/**
 * 选中人员姓名填充到输入框
 * @param {HTMLElement} ele 当前点击的姓名节点
 */
function mySelect(ele) {
  // 把选中的姓名文本赋值给输入框
  $(".my-textbox").val($(ele).text());
  // 隐藏下拉菜单
  $(".personsMenu").hide();
}

HTML部分

仅需要修改姓名项的点击事件,传入当前点击元素对象,其余结构保持不变即可:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<div class="cover">
  <div name="selected">
    <i class="mdi-account-search mdi"></i>
    <input class="my-textbox" id="textboxEmp" autofocus="autofocus" placeholder="search staff member" />
  </div>
  <div class="personsMenu">
    <ul class="infor">
      <div class="nm1" name="selected">
        <!-- 点击事件传入this代表当前点击的元素 -->
        <li class="name12" onclick="mySelect(this)">Malubane Nyikiwe</li>
        <li>nyikiwe.malubane@m-t.co.za</li>
      </div>
      <div class="no-results">no employee found by that name</div>
      <div class="nm1" name="selected">
        <li class="name12" onclick="mySelect(this)">Chamano Sydney</li>
        <li>sydney.chamano@m-t.co.za</li>
      </div>
      <div class="nm1" name="selected">
        <li class="name12" onclick="mySelect(this)">Diphofa Tumelo</li>
        <li>tumelo.diphofa@m-t.co.za</li>
      </div>
    </ul>
  </div>
</div>

效果说明

修复后可完全实现预期交互:

  • 输入框输入内容时自动弹出下拉,实时过滤匹配的人员项
  • 无匹配结果时显示对应提示
  • 点击人员姓名后自动把姓名填充到输入框,同时关闭下拉列表
  • 输入框为空时下拉自动隐藏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 21:33:28