jQuery自定义多选下拉框效果

来讲解一下“jQuery自定义多选下拉框效果”的攻略。

1. 确定实现思路

首先,我们需要明确所需实现的效果。下拉框的基本原理是列表显示,我们需要将列表生成后通过CSS隐藏,在点击下拉按钮的时候再通过动态修改CSS的方式来影响下拉列表的显示和隐藏。而自定义多项选择则需要在下拉框的基础上做进一步拓展,在下拉框的列表项前面添加一个复选框,实现多项选择。

2. 代码实现

下面是代码实现的详细步骤:

  1. 在HTML文件中添加下拉框及列表
<select id="select" multiple>
    <option value="option1">选项1</option>
    <option value="option2">选项2</option>
    <option value="option3">选项3</option>
    <option value="option4">选项4</option>
    <option value="option5">选项5</option>
</select>
  1. 在CSS文件中对下拉框和下拉列表进行样式设置
/* 下拉框样式设置 */
#select {
    width: 200px;
    height: 30px;
    appearance: none; /* 去除默认下拉框样式 */
    outline: none; /* 去除点击时的外边框 */
    background: url("下拉按钮.png") no-repeat right center; /* 添加下拉按钮 */
    background-size: 25px 25px;
    border: 1px solid #ccc;
}
/* 下拉列表样式设置 */
.dropdown {
    width: 200px;
    max-height: 150px;
    overflow-y: scroll;
    list-style: none;
    margin: 0px;
    padding: 0px;
    border: 1px solid #ccc;
    position: absolute;
    display: none; /* 下拉列表默认隐藏 */
    z-index: 999;
}
.dropdown li {
    padding: 5px 10px;
    cursor: pointer;
}
.dropdown li:hover {
    background-color: #f6f6f6;
}
  1. 使用jQuery添加下拉框展开和收缩的事件
$('#select').click(function () {
  if ($('.dropdown').is(':hidden')) {
    $('.dropdown').show();
  } else {
    $('.dropdown').hide();
  }
});
  1. 动态生成下拉列表和复选框,并实现多选功能
//动态生成下拉列表
$("#select option").each(function () {
    var t = $(this).val();
    var n = $(this).text();
    var li = "<li><input type='checkbox' value='" + t + "'/>" + n + "</li>";
    $(".dropdown").append(li);
});
//为checkbox添加点击事件
$(".dropdown input[type='checkbox']").click(function () {
    //取得所有选中的checkbox的值,然后组合为字符串,赋值给select
    var selected = "";
    $(".dropdown input[type='checkbox']:checked").each(function () {
        selected += $(this).val() + ",";
    });
    selected = selected.substring(0, selected.length - 1);
    $("#select").val(selected);
    //实现多选框的拼接效果
    var bubbleText = "";
    $(".dropdown input[type='checkbox']:checked").each(function () {
        bubbleText += $(this).parent().text() + ",";
    });
    bubbleText = bubbleText.substring(0, bubbleText.length - 1);
    $("#select").next().text(bubbleText);
});

3. 示例说明

下面是两个示例,第一个是单选的下拉框,第二个是多选的下拉框。

示例1 - 单选下拉框

<!DOCTYPE html>
<html>
<head>
    <title>自定义单选下拉框效果</title>
    <meta charset="utf-8">
    <style>
        #select {
            width: 200px;
            height: 30px;
            appearance: none; /* 去除默认下拉框样式 */
            outline: none; /* 去除点击时的外边框 */
            background: url("img/arrow.png") no-repeat right center; /* 添加下拉按钮 */
            background-size: 30px 30px;
            border: 1px solid #ccc;
            position: relative; /* 定位父元素 */
        }
        .dropdown {
            width: 200px;
            max-height: 150px;
            overflow-y: scroll;
            list-style: none;
            margin: 0px;
            padding: 0px;
            border: 1px solid #ccc;
            position: absolute;
            display: none; /* 下拉列表默认隐藏 */
            z-index: 999;
            top: 30px; /* 让下拉框在下拉按钮下方出现 */
            background-color: #fff;
        }
        .dropdown li {
            padding: 5px 10px;
            cursor: pointer;
        }
        .dropdown li:hover {
            background-color: #f6f6f6;
        }
    </style>
</head>
<body>
    <select id="select">
        <option value="" hidden>请选择</option>
        <option value="option1">选项1</option>
        <option value="option2">选项2</option>
        <option value="option3">选项3</option>
        <option value="option4">选项4</option>
        <option value="option5">选项5</option>
    </select>
    <ul class="dropdown">
        <li value="option1">选项1</li>
        <li value="option2">选项2</li>
        <li value="option3">选项3</li>
        <li value="option4">选项4</li>
        <li value="option5">选项5</li>
    </ul>
    <script src="https://code.jquery.com/jquery-3.6.0.js"></script>
    <script>
        $('#select').click(function(event) {
            event.stopPropagation(); // 阻止事件冒泡
            if ($('.dropdown').is(':hidden')) {
                $('.dropdown').show();
            } else {
                $('.dropdown').hide();
            }
        });
        $('.dropdown li').click(function() {
            $('.dropdown').hide(); // 点击后隐藏下拉框
            $('#select').val($(this).attr('value'));
            $('#select').next().text($(this).text());
        });
    </script>
</body>
</html>

示例2 - 多选下拉框

<!DOCTYPE html>
<html>
<head>
    <title>自定义多选下拉框效果</title>
    <meta charset="utf-8">
    <style>
        #select {
            width: 200px;
            height: 30px;
            appearance: none; /* 去除默认下拉框样式 */
            outline: none; /* 去除点击时的外边框 */
            background: url("img/arrow.png") no-repeat right center; /* 添加下拉按钮 */
            background-size: 30px 30px;
            border: 1px solid #ccc;
            position: relative; /* 定位父元素 */
        }
        .bubble {
            display: inline-block;
            max-width: calc(100% - 28px);
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
            padding-right: 5px;
            position: absolute;
            left: 5px;
            top: 5px;
        }
        .bubble:after {
            content: "";
            display: inline-block;
            vertical-align: middle;
            margin-left: 5px;
            height: 0;
            width: 0;
            border-top: 6px solid #ccc;
            border-bottom: 6px solid transparent;
            border-left: 6px solid transparent;
            border-right: 6px solid transparent;
            position: relative;
            top: -1px;
        }
        .dropdown {
            width: 200px;
            max-height: 150px;
            overflow-y: scroll;
            list-style: none;
            margin: 0px;
            padding: 0px;
            border: 1px solid #ccc;
            position: absolute;
            display: none; /* 下拉列表默认隐藏 */
            z-index: 999;
            top: 30px; /* 让下拉框在下拉按钮下方出现 */
            background-color: #fff;
        }
        .dropdown li {
            padding: 5px 10px;
            cursor: pointer;
        }
        .dropdown li:hover {
            background-color: #f6f6f6;
        }
        .dropdown input[type='checkbox'] {
            margin-right: 5px;
            vertical-align: middle;
        }
    </style>
</head>
<body>
    <select id="select" multiple>
        <option value="option1">选项1</option>
        <option value="option2">选项2</option>
        <option value="option3">选项3</option>
        <option value="option4">选项4</option>
        <option value="option5">选项5</option>
    </select>
    <div class="bubble"></div>
    <ul class="dropdown">
    </ul>
    <script src="https://code.jquery.com/jquery-3.6.0.js"></script>
    <script>
        //动态生成下拉列表
        $("#select option").each(function () {
            var t = $(this).val();
            var n = $(this).text();
            var li = "<li><input type='checkbox' value='" + t + "'/>" + n + "</li>";
            $(".dropdown").append(li);
        });
        //为checkbox添加点击事件
        $(".dropdown input[type='checkbox']").click(function () {
            //取得所有选中的checkbox的值,然后组合为字符串,赋值给select
            var selected = "";
            $(".dropdown input[type='checkbox']:checked").each(function () {
                selected += $(this).val() + ",";
            });
            selected = selected.substring(0, selected.length - 1);
            $("#select").val(selected);
            //实现多选框的拼接效果
            var bubbleText = "";
            $(".dropdown input[type='checkbox']:checked").each(function () {
                bubbleText += $(this).parent().text() + ",";
            });
            bubbleText = bubbleText.substring(0, bubbleText.length - 1);
            $(".bubble").text(bubbleText);
        });
        //下拉按钮的click事件
        $("#select").next().click(function(event) {
            event.stopPropagation(); // 阻止事件冒泡
            if ($('.dropdown').is(':hidden')) {
                $('.dropdown').show();
            } else {
                $('.dropdown').hide();
            }
        });
    </script>
</body>
</html>

以上就是“jQuery自定义多选下拉框效果”的完整攻略,希望对你有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery自定义多选下拉框效果 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQWidgets jqxTreeMap theme属性

    jQWidgets是一个jQuery插件库,其中包含了各种UI组件和数据可视化组件。其中的jqxTreeMap组件是一个矩形树状图,可以用于展示有层次结构的数据,并根据数据大小自动分配矩形大小及颜色。 在jqxTreeMap中,可以通过theme属性来设置矩形树状图的样式主题。theme属性有以下取值: classic:经典主题,使用黑色背景及白色字体,矩形…

    jquery 2023年5月12日
    00
  • JS实现title标题栏文字不间断滚动显示效果

    下面是我对“JS实现title标题栏文字不间断滚动显示效果”的完整攻略: 1. 实现原理 我们可以使用 JavaScript 编写一个函数,将需要滚动显示的文本信息拆分为单个字符,然后根据一定的时间间隔逐个更改 title 标签中的文本,从而呈现出文字不间断滚动的效果。 2. 实现步骤 2.1 将标题拆分为单个字符 function splitTitle(t…

    jquery 2023年5月27日
    00
  • 如何在jQuery中在特定秒数后重新加载页面

    在jQuery中,可以使用setTimeout函数实现在特定秒数后重新加载页面。 步骤如下: Step 1:引入jQuery库 在HTML文件<head>标签中引入jQuery库。 <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js&q…

    jquery 2023年5月12日
    00
  • 如何使用jQuery Mobile制作迷你垂直复选框控制组

    下面是使用jQuery Mobile制作迷你垂直复选框控制组的完整攻略。 1. 添加jQuery Mobile库文件 首先需要引入jQuery库和jQuery Mobile样式库文件。可以从jQuery官网中下载最新的jQuery库文件,而jQuery Mobile库文件则可以通过CDN引入,具体代码如下: <!– 引入 jQuery 库文件 –&…

    jquery 2023年5月12日
    00
  • jQWidgets jqxDocking showAllCloseButtons() 方法

    以下是关于“jQWidgets jqxDocking showAllCloseButtons() 方法”的完整攻略,包含两个示例说明: 方法简介 showAllCloseButtons() 是 jQWidgets jqxDocking 控件的方法,用于显示所有窗口的关闭按钮。该方法的语法如下: $("#jqxDocking").jqxDo…

    jquery 2023年5月10日
    00
  • 详解jquery easyui之datagrid使用参考

    标题:详解jQuery EasyUI之DataGrid使用参考 简介 DataGrid是jQuery EasyUI中非常常用的组件之一,它提供了一种非常优雅的方式来展示数据。本篇文章将详细介绍如何在项目中使用DataGrid组件。 基本使用方法 首先,我们需要在HTML页面中引入EasyUI和DataGrid的CSS和JS文件。接下来,在HTML页面中准备一…

    jquery 2023年5月28日
    00
  • jQWidgets jqxDataTable showColumn()方法

    jQWidgets 是一个流行的 JavaScript UI 库,提供了许多可定制的 UI 组件。其中一个组件是 jqxDataTable,它是用于显示和编辑表格数据的件。jqDataTable 提供多个方法和属性,其中之一是 showColumn()。下面是关于 jqxDataTable 的 showColumn() 方法的详攻略: showColumn(…

    jquery 2023年5月11日
    00
  • 使用jquery动态加载Js文件和Css文件

    使用jQuery动态加载JavaScript文件和CSS文件的方法,可以帮助提高网站的性能,降低网站的加载时间。下面是详细讲解使用jQuery动态加载JS文件和CSS文件的完整攻略: 加载JavaScript文件 使用$.getScript方法加载单个JS文件 jQuery提供了一个getScript方法,可以通过Ajax加载JavaScript文件,使用如…

    jquery 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部