JavaScript实现左右下拉框动态增删示例

下面是详细的“JavaScript实现左右下拉框动态增删”攻略:

准备工作

在开始实现之前,我们需要先准备好需要用到的 HTML 结构和 JavaScript 文件。具体代码如下:

HTML 结构:

<!-- 左右两边的下拉框容器 -->
<div class="selectBox">
    <select multiple="multiple" class="allItems" size="15"></select>
    <div class="btnBox">
        <button class="addBtn">&gt;&gt;</button>
        <button class="delBtn">&lt;&lt;</button>
    </div>
    <select multiple="multiple" class="selectedItems" size="15"></select>
</div>

其中,.allItems 表示所有可选中的项目,.selectedItems 表示已被选中的项目,.addBtn.delBtn 分别代表“增加”和“删除”按钮。

JavaScript 文件:

// 获取左右两个下拉框对象
var allList = document.querySelector(".allItems");
var selectedList = document.querySelector(".selectedItems");

// 绑定“增加”按钮点击事件
var addButton = document.querySelector(".addBtn");
addButton.onclick = function () {
    // 获取所有选中的项目
    var selectedOptions = allList.querySelectorAll("option:checked");
    for (var i = 0; i < selectedOptions.length; i++) {
        // 将选中的项目加入右侧下拉框
        selectedList.appendChild(selectedOptions[i]);
    }
};

// 绑定“删除”按钮点击事件
var delButton = document.querySelector(".delBtn");
delButton.onclick = function () {
    // 获取所有选中的项目
    var selectedOptions = selectedList.querySelectorAll("option:checked");
    for (var i = 0; i < selectedOptions.length; i++) {
        // 将选中的项目加入左侧下拉框
        allList.appendChild(selectedOptions[i]);
    }
};

在这段 JavaScript 代码中,我们首先获取了左右两个下拉框的对象,并绑定了“增加”和“删除”按钮的点击事件。其中,“增加”按钮的点击事件会将左侧的选中项加入右侧下拉框,“删除”按钮的点击事件会将右侧的选中项加入左侧下拉框。

示例说明

示例1:多个下拉框之间分别进行增删项操作

例如,我们有两个下拉框,分别为 “allBox1” 和 “selectedBox1”,以及 “allBox2” 和 “selectedBox2”。如果我们只需要在单个下拉框中进行操作,只需将类选择器 .allItems.selectedItems 替换成相应下拉框的 ID 或类名即可。例如:

<!-- 第1个下拉框容器 -->
<div class="selectBox">
    <select multiple="multiple" class="allItems1" size="15"></select>
    <div class="btnBox">
        <button class="addBtn1">&gt;&gt;</button>
        <button class="delBtn1">&lt;&lt;</button>
    </div>
    <select multiple="multiple" class="selectedItems1" size="15"></select>
</div>

<!-- 第2个下拉框容器 -->
<div class="selectBox">
    <select multiple="multiple" class="allItems2" size="15"></select>
    <div class="btnBox">
        <button class="addBtn2">&gt;&gt;</button>
        <button class="delBtn2">&lt;&lt;</button>
    </div>
    <select multiple="multiple" class="selectedItems2" size="15"></select>
</div>

JavaScript 代码:

// 获取左右两个下拉框对象
var allList1 = document.querySelector(".allItems1");
var selectedList1 = document.querySelector(".selectedItems1");
var allList2 = document.querySelector(".allItems2");
var selectedList2 = document.querySelector(".selectedItems2");

// 绑定第1个“增加”按钮点击事件
var addButton1 = document.querySelector(".addBtn1");
addButton1.onclick = function () {
    // 获取所有选中的项目
    var selectedOptions = allList1.querySelectorAll("option:checked");
    for (var i = 0; i < selectedOptions.length; i++) {
        // 将选中的项目加入右侧下拉框
        selectedList1.appendChild(selectedOptions[i]);
    }
};

// 绑定第1个“删除”按钮点击事件
var delButton1 = document.querySelector(".delBtn1");
delButton1.onclick = function () {
    // 获取所有选中的项目
    var selectedOptions = selectedList1.querySelectorAll("option:checked");
    for (var i = 0; i < selectedOptions.length; i++) {
        // 将选中的项目加入左侧下拉框
        allList1.appendChild(selectedOptions[i]);
    }
};

// 绑定第2个“增加”按钮点击事件
var addButton2 = document.querySelector(".addBtn2");
addButton2.onclick = function () {
    // 获取所有选中的项目
    var selectedOptions = allList2.querySelectorAll("option:checked");
    for (var i = 0; i < selectedOptions.length; i++) {
        // 将选中的项目加入右侧下拉框
        selectedList2.appendChild(selectedOptions[i]);
    }
};

// 绑定第2个“删除”按钮点击事件
var delButton2 = document.querySelector(".delBtn2");
delButton2.onclick = function () {
    // 获取所有选中的项目
    var selectedOptions = selectedList2.querySelectorAll("option:checked");
    for (var i = 0; i < selectedOptions.length; i++) {
        // 将选中的项目加入左侧下拉框
        allList2.appendChild(selectedOptions[i]);
    }
};

以上代码中,我们分别绑定了不同下拉框的“增加”和“删除”按钮点击事件,并在点击事件中分别对应不同的“allList”和“selectedList”对象进行操作。

示例2:在已选中的下拉框中搜索并添加新项目

在上面这个示例中,我们只是简单地将所有选中的项移动到右侧下拉框。但如果我们想要在已选中的下拉框中进行搜索,并将搜索结果添加到右侧下拉框中,应该怎么做呢?下面我们就来看一下示例代码:

<!-- 左右两边的下拉框容器 -->
<div class="selectBox">
    <select multiple="multiple" class="allItems" size="15"></select>
    <div class="btnBox">
        <button class="addBtn">&gt;&gt;</button>
        <button class="delBtn">&lt;&lt;</button>
    </div>
    <select multiple="multiple" class="selectedItems" size="15"></select>
</div>

<!-- 搜索框 -->
<input type="text" class="searchBox" />

<!-- 数据数组 -->
<script>
  var data = [
    {"name": "苹果", "value": 1},
    {"name": "橘子", "value": 2},
    {"name": "香蕉", "value": 3},
    {"name": "西瓜", "value": 4},
    {"name": "葡萄", "value": 5},
    {"name": "梨子", "value": 6}
  ];
</script>

在这段代码中,我们增加了一个搜索框和一个数据数组。搜索框用于输入需要搜索的项名称,数据数组包含了所有可添加的选项信息。

接下来,我们来实现 JavaScript 代码:

// 搜索框对象
var searchBox = document.querySelector(".searchBox");
// 左侧下拉框对象
var allList = document.querySelector(".allItems");
// 右侧下拉框对象
var selectedList = document.querySelector(".selectedItems");

// 绑定“搜索”按钮点击事件
var searchButton = document.querySelector(".searchBtn");
searchButton.onclick = function () {
    // 获取待搜索的值
    var keyword = searchBox.value.toLowerCase();
    // 遍历数据数组
    for (var i = 0; i < data.length; i++) {
        // 判断搜索结果
        if (data[i].name.toLowerCase().includes(keyword)) {
            // 判断结果是否已存在右侧下拉框中
            if (!selectedList.querySelector("option[value='" + data[i].value + "']")) {
                // 插入右侧下拉框
                var option = new Option(data[i].name, data[i].value);
                selectedList.add(option);
            }
        }
    }
};

// 绑定“增加”按钮点击事件
var addButton = document.querySelector(".addBtn");
addButton.onclick = function () {
    // 获取所有选中的项目
    var selectedOptions = allList.querySelectorAll("option:checked");
    for (var i = 0; i < selectedOptions.length; i++) {
        // 将选中的项目加入右侧下拉框
        selectedList.appendChild(selectedOptions[i]);
    }
};

// 绑定“删除”按钮点击事件
var delButton = document.querySelector(".delBtn");
delButton.onclick = function () {
    // 获取所有选中的项目
    var selectedOptions = selectedList.querySelectorAll("option:checked");
    for (var i = 0; i < selectedOptions.length; i++) {
        // 将选中的项目加入左侧下拉框
        allList.appendChild(selectedOptions[i]);
    }
};

该 JavaScript 代码中,我们增加了一个“搜索”按钮点击事件,用于对数据数组中的项进行搜索并添加到右侧下拉框中。另外,“增加”和“删除”按钮的操作方式和示例1相同。

在这个示例中,我们在已选中的下拉框中进行了搜索,并将结果加入到右侧下拉框中。这个功能对于需要手工添加大量选项的情况,可以提高效率,同时也可以预防漏填选项的情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现左右下拉框动态增删示例 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 谈谈为什么你的 JavaScript 代码如此冗长

    关于“为什么你的 JavaScript 代码如此冗长”,可以从以下几个方面进行讲解: 1. 缺乏模块化 在JavaScript早期,缺乏模块化的支持,导致需要在同一个文件中书写大量的代码,从而导致代码的冗长。在ES6规范中,提供了更好的模块化支持,让代码可以分割成独特的模块,方便维护和管理。 因此,对于冗长的JavaScript代码,可以考虑将其模块化,将功…

    css 2023年6月9日
    00
  • HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手

    HTML+CSS盒模型是网页设计中非常重要的一个概念,了解盒模型对于网页布局和样式的掌控有着十分关键的作用。其中“border-radius”属性是用于创建各种圆角的CSS属性。下面将在这个主题下,提供一个简单的上手攻略,来实现几个有趣的案例。 HTML+CSS 圆形盒子 实现一个简单的圆形盒子非常简单,我们只需要在CSS代码中添加“border-radiu…

    css 2023年6月10日
    00
  • CodeIgniter生成网站sitemap地图的方法

    下面是详细的“CodeIgniter生成网站sitemap地图的方法”的攻略过程。 什么是网站sitemap地图? 网站Sitemap,又称为XML Sitemap,是一种文件格式,用于告知搜索引擎关于网站上所有页面的信息。Sitemap 可以显示站点中哪些页面有多重关系和哪些页面之间的相对优先级。 CodeIgniter生成网站Sitemap地图的方法 在…

    css 2023年6月10日
    00
  • css3实现的多级渐变下拉菜单导航效果代码

    下面是关于“CSS3实现的多级渐变下拉菜单导航效果”的完整攻略。 简述 所谓“多级渐变下拉菜单导航效果”,是指导航栏具有多层级别(多级导航菜单),并且在展开时,会出现渐变效果。这样的效果能够让网站视觉效果更加优美,同时也方便用户查看导航项。 前置知识 在学习CSS3实现多级渐变下拉菜单导航之前,您需要掌握以下知识: HTML和CSS基础 网页布局 基本的CS…

    css 2023年6月11日
    00
  • 详解css3中transition属性

    下面是详解 transition 属性的完整攻略: 什么是CSS3中的transition属性 CSS3中的 transition 属性可以帮助我们实现CSS属性渐变的效果,通过这个属性,我们可以让一个CSS属性从一种状态逐渐的过渡到另一种状态,并且可以设定过渡的时间和过渡规则,比如线性、缓入缓出等等。 transition 属性一般由以下几个关键字组成: …

    css 2023年6月10日
    00
  • dreamweaver 8怎么通过代码设置页面高宽颜色?

    通过Dreamweaver 8的代码编辑器设置页面高度、宽度和颜色非常简单。以下是设置页面高宽颜色的完整攻略。 步骤1:创建一个新的HTML文件 首先,在Dreamweaver 8中创建一个新的HTML文件。通过选择“文件 > 新建”菜单项打开新建文件对话框。从中选择”HTML”文档类型,并单击”创建”按钮。这将创建一个空白HTML文档。 步骤2:在文…

    css 2023年6月9日
    00
  • 浅谈webpack4.x 入门(一篇足矣)

    浅谈webpack4.x 入门(一篇足矣)是一个webpack入门教程,主要讲解了webpack的基本概念和使用方式。下面是详细的攻略: 什么是webpack Webpack是一个打包工具,它可以将多个模块打包成一个文件,并且支持代码分割和模块化。在Web应用程序开发中,使用Webpack可以提高应用程序的性能和可维护性,同时也可以简化开发流程。 webpa…

    css 2023年6月9日
    00
  • 谈一谈bootstrap响应式布局

    Bootstrap是一种流行的CSS框架,具有响应式设计,可以自适应于各种设备。以下是一些关于如何使用Bootstrap进行响应式布局的指南: 什么是响应式布局? 响应式布局是一种能够自适应各种不同的设备和屏幕尺寸的网站布局。传统布局方式是在开发网站时针对特定设备进行设计和开发,但响应式布局能够适应不同的屏幕大小和方向,并且可以为多种设备提供一致的用户体验。…

    css 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部