当前位置:首页 > JavaScript

js 多选 实现

2026-04-03 22:58:05JavaScript

实现多选功能的方法

使用 JavaScript 实现多选功能通常涉及监听用户操作(如点击或键盘事件),并动态更新选中状态。以下是几种常见的实现方式:

基于复选框的多选 通过复选框(<input type="checkbox">)实现多选是最直接的方式。通过遍历复选框组,获取选中的值:

js 多选 实现

// 获取所有复选框
const checkboxes = document.querySelectorAll('input[type="checkbox"]');

// 监听复选框变化
checkboxes.forEach(checkbox => {
  checkbox.addEventListener('change', function() {
    if (this.checked) {
      console.log('选中:', this.value);
    }
  });
});

基于列表项的多选 通过点击列表项切换选中状态,通常配合 CSS 高亮显示选中项:

const items = document.querySelectorAll('.selectable-item');

items.forEach(item => {
  item.addEventListener('click', function() {
    this.classList.toggle('selected'); // 切换选中样式
  });
});

配合键盘的多选(Shift 多选) 允许用户通过按住 Shift 键进行范围多选:

js 多选 实现

let lastSelectedIndex = -1;

document.querySelectorAll('.item').forEach((item, index) => {
  item.addEventListener('click', function(e) {
    if (e.shiftKey && lastSelectedIndex !== -1) {
      // 处理范围选择逻辑
      const start = Math.min(index, lastSelectedIndex);
      const end = Math.max(index, lastSelectedIndex);
      for (let i = start; i <= end; i++) {
        items[i].classList.add('selected');
      }
    }
    lastSelectedIndex = index;
  });
});

状态管理与数据绑定

将选中状态与数据模型绑定,便于后续操作:

const selectedItems = [];

document.querySelectorAll('.item').forEach(item => {
  item.addEventListener('click', function() {
    const itemId = this.dataset.id;
    const index = selectedItems.indexOf(itemId);

    if (index === -1) {
      selectedItems.push(itemId); // 添加选中项
    } else {
      selectedItems.splice(index, 1); // 移除选中项
    }
    console.log('当前选中:', selectedItems);
  });
});

全选/反选功能

添加全选或反选按钮提升操作效率:

document.getElementById('select-all').addEventListener('click', function() {
  const checkboxes = document.querySelectorAll('input[type="checkbox"]');
  checkboxes.forEach(checkbox => {
    checkbox.checked = true;
  });
});

注意事项

  • 性能优化:对于大量选项,建议使用事件委托而非逐个绑定事件。
  • 无障碍支持:确保键盘操作(如 Space/Enter)可触发多选,并添加 ARIA 属性。
  • 移动端适配:考虑长按或拖拽等多选交互方式。

标签: 多选js
分享给朋友:

相关文章

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…