新闻中心

实现可搜索下拉复选框的“全选”功能

2025-10-10
浏览次数:
返回列表

实现可搜索下拉复选框的“全选”功能

摘要

本文旨在解决在使用 J*aScript 实现的可搜索下拉复选框中,“全选”功能在搜索过滤后仍然选择所有选项的问题。通过修改 J*aScript 代码,使“全选”功能仅作用于当前显示的复选框,提升用户体验。主要涉及 CSS 类的使用和 J*aScript 中 DOM 元素的选择。

正文

在使用 J*aScript 构建具有搜索功能的下拉复选框时,一个常见的需求是实现“全选”功能,即点击一个复选框可以选择或取消选择所有选项。然而,当用户使用搜索功能过滤选项后,“全选”功能通常会选择所有原始选项,而不是仅仅选择当前显示的选项。本文将介绍如何修改 J*aScript 代码,使“全选”功能仅作用于当前显示的复选框。

1. 使用 CSS 类控制显示状态

为了更方便地控制元素的显示和隐藏,建议使用 CSS 类,而不是直接修改 style 属性。修改 filterFunction 函数,使用 classList.toggle 方法来添加或移除 hidden 类,从而控制选项的显示状态。

function filterFunction() {
  var input, filter, ul, li, a, i;
  input = document.getElementById("myInput");
  filter = input.value.toUpperCase();
  div = document.getElementById("getMerchant");
  a = div.getElementsByTagName("li");
  for (i = 1; i < a.length; i++) {
    txtValue = a[i].textContent || a[i].innerText;
    a[i].classList.toggle('hidden', txtValue.toUpperCase().indexOf(filter) === -1);
  }
}

在上面的代码中,a[i].classList.toggle('hidden', txtValue.toUpperCase().indexOf(filter) === -1); 这行代码会根据搜索结果,动态地给 li 元素添加或移除 hidden 类。如果 txtValue 中不包含 filter,则添加 hidden 类,隐藏该选项;否则,移除 hidden 类,显示该选项。

注意: 确保你的 CSS 中定义了 .hidden 类,例如:

睿拓智能网站系统-网上商城 睿拓智能网站系统-网上商城

睿拓智能网站系统-网上商城1.0免费版软件大小:5M运行环境:asp+access本版本是永州睿拓信息专为电子商务入门级用户开发的网上电子商城系统,拥有产品发布,新闻发布,在线下单等全部功能,并且正式商用用户可在线提供多个模板更换,可实现一般网店交易所有功能,是中小企业和个人开展个人独立电子商务商城最佳的选择,以下为详细功能介绍:1.最新产品-提供最新产品发布管理修改,和最新产品订单查看2.推荐产

睿拓智能网站系统-网上商城 0 查看详情 睿拓智能网站系统-网上商城
.hidden {
  display: none;
}

2. 修改“全选”功能

修改 selectAll 函数,使其只选择当前显示的复选框。可以使用 querySelectorAll 方法选择所有未隐藏的复选框。

function selectAll() {
  var ele = document.querySelectorAll("li:not(.hidden) > div > input[type=checkbox]");
  var checked = $('#checkbox-item-14').is(':checked');
  for (var i = 0; i < ele.length; i++) {
    ele[i].checked = checked;
  }
}

在上面的代码中,document.querySelectorAll("li:not(.hidden) > div > input[type=checkbox]") 这行代码会选择所有不在 hidden 类中的 li 元素下的 div 元素下的 input[type=checkbox] 元素。这样,selectAll 函数只会作用于当前显示的复选框。

3. 完整代码示例

下面是完整的 HTML 和 J*aScript 代码示例:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js" integrity="sha512-3gJwYpMe3QewGELv8k/BX9vcqhryRdzRMxVfq6ngyWXwo03GFEzjsUm8Q7RZcHPHksttq7/GFoxjCVUjkjvPdw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdn.tailwindcss.com"></script>

<div id="dropdownSearch" class="bg-white rounded-lg shadow w-60" style="z-index: 999;">
  <div class="p-3">
    <label for="input-group-search" class="sr-only">Search</label>
    <div class="relative">
      <div class="absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none">
        <svg class="w-5 h-5 text-gray-500 dark:text-gray-400" aria-hidden="true" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z" clip-rule="evenodd"></path></svg>
      </div>
      <input type="text" id="myInput" onkeyup="filterFunction()" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full pl-10 p-2.5 " placeholder="Search user">
    </div>
  </div>
  <ul id="getMerchant" class="h-48 px-3 pb-3 overflow-y-auto text-sm text-gray-700 dark:text-gray-200" aria-labelledby="dropdownSearchButton">
    <li>
      <div class="flex items-center p-2 rounded hover:bg-gray-100 dark:hover:bg-gray-600">
        <input id="checkbox-item-14" onchange="selectAll()" type="checkbox" class="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500">
        <label for="checkbox-item-14" id="select_all" class="w-full ml-2 text-sm font-medium text-gray-900 rounded dark:text-gray-300">Select All</label>
      </div>
    </li>
    <li>
      <div id="myDropdown" class="flex items-center p-2 rounded hover:bg-gray-100 ">
        <input id="merchant" name="merchant[]" type="checkbox" value="foo" class="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 ">
        <label for="merchant-checkbox" id="merchant_name" class="w-full ml-2 text-sm font-medium text-gray-900 rounded ">foo</label>
      </div>
    </li>
    <li>
      <div id="myDropdown" class="flex items-center p-2 rounded hover:bg-gray-100 ">
        <input id="merchant" name="merchant[]" type="checkbox" value="bar" class="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 ">
        <label for="merchant-checkbox" id="merchant_name" class="w-full ml-2 text-sm font-medium text-gray-900 rounded ">bar</label>
      </div>
    </li>
    <li>
      <div id="myDropdown" class="flex items-center p-2 rounded hover:bg-gray-100 ">
        <input id="merchant" name="merchant[]" type="checkbox" value="baz" class="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 ">
        <label for="merchant-checkbox" id="merchant_name" class="w-full ml-2 text-sm font-medium text-gray-900 rounded ">baz</label>
      </div>
    </li>
  </ul>
</div>

<script>
    function filterFunction() {
        var input, filter, ul, li, a, i;
        input = document.getElementById("myInput");
        filter = input.value.toUpperCase();
        console.log(filter);
        div = document.getElementById("getMerchant");
        a = div.getElementsByTagName("li");
        for (i = 1; i < a.length; i++) {
            txtValue = a[i].textContent || a[i].innerText;
            a[i].classList.toggle('hidden', txtValue.toUpperCase().indexOf(filter) === -1);
        }
    }

    function selectAll() {
        var ele = document.querySelectorAll("li:not(.hidden) > div > input[type=checkbox]");
        var checked = $('#checkbox-item-14').is(':checked');
        for (var i = 0; i < ele.length; i++) {
            ele[i].checked = checked;
        }
    }
</script>

4. 注意事项

  • 确保引入了 jQuery 库,因为代码中使用了 $('#checkbox-item-14').is(':checked')。
  • 根据实际情况修改 HTML 结构和 CSS 类名。
  • 可以根据需要优化搜索算法,例如使用更高效的字符串匹配方法。

5. 总结

通过使用 CSS 类控制元素的显示状态,并修改 J*aScript 代码,可以实现可搜索下拉复选框的“全选”功能,使其仅作用于当前显示的选项。这种方法可以提升用户体验,使下拉复选框更加易于使用。

以上就是实现可搜索下拉复选框的“全选”功能的详细内容,更多请关注其它相关文章!


# 手机和wap网站建设  # 自定义  # 使其  # 在上面  # 最新产品  # 搜索功能  # 永州  # 丹东企业seo软件排名  # seo首页优化首推火星  # 移除  # 京东的网站建设情况  # 跨境电商网站推广  # 敦煌营销推广计划表  # 优化网站标题设计  # 铁岭企业seo方案  # 京东营销推广渠道  # 甘家口网站优化  # css  # 仅作  # 全选  # 复选框  # o  # cdn  # win  # ai  # ssl  # svg  # ajax  # js  # html  # jquery  # java  # javascript 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】  漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口  如何使用Go和Martini动态服务解码后的图片  Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询  PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误  AO3官方镜像站点汇总 AO3同人作品网页版直达链接  如何使 Jest 模拟函数默认抛出错误以提高测试效率  C++如何实现单例模式_C++设计模式之线程安全的单例写法  顺丰快递查询系统 官方正版查询入口  Go语言HTML解析:利用Goquery精准获取指定元素内容  蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址  AngularJS $http POST请求数据传递与Go后端接收实践  PHP URL参数传递与500错误调试指南  Golang如何优雅处理error_Golang error处理最佳实践总结  《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!  如何在Promise链中有效终止错误处理后的执行  Win10双系统截图高效法 截屏快捷键速记【技巧】  win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】  Golang并发任务中错误如何聚合_Golang goroutine error收集方式  163邮箱官方主页登录 直达网易邮箱登录核心页面  Composer如何在生产环境安全地执行composer update  J*aScript 字符串标签转换:使用正则表达式高效替换  千牛数据看板网页版_千牛数据看板网页版访问方法  在React函数组件中利用原生HTML5进行邮箱地址验证  解决Flask中Quill编辑器内容提交失败及TypeError的指南  J*aScript数组对象转换:按指定键分组与值收集  迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法  夸克AO3官网入口_AO3镜像网站2025推荐  邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧  LINQ to XML为何解析失败? 深入理解C# XDocument的异常处理  小红书网页版入口链接分享 小红书官网直接进  Python模块化编程:有效管理依赖与避免循环引用  sublime如何优雅地处理行尾空格_sublime自动清理多余空白字符配置  Lar*el头像管理:图片缩放与旧文件删除的最佳实践  Go语言中高效处理x-www-form-urlencoded表单数据  快手极速版在线观看 官方网页版登录地址  win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】  QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台  C#中解析不规范的HTML为XML 常见的坑与解决办法  顺丰快件物流信息 官方网站查询入口  电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】  J*aScript中高效管理与清空动态列表:避免循环陷阱  Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践  火锅吃太多会怎样 火锅吃太多会上火吗  J*aScript教程:根据元素文本内容动态设置背景色  c++如何使用TBB库进行任务并行_c++ Intel线程构建模块  Spring Boot嵌入式服务器与J*a EE:功能支持深度解析  狙击外星人小游戏开始_狙击外星人小游戏立即开始  小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口  如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题 

搜索