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日

相关文章

  • jQuery UI Datepicker isDisabled()方法

    jQuery UI 的 Datepicker 组件提供了一个 isDisabled() 方法,该方法用于检查日期选择器是否被禁用。在本教程中,我们将详细介绍 Datepicker isDisabled() 方法的使用方法。 isDisabled() 方法基本语法如下: $( ".selector" ).datepicker( "…

    jquery 2023年5月11日
    00
  • jQWidgets jqxListBox dragStart属性

    jqxListBox 是 jQWidgets 提供的一种列表框控件,用于在 Web 应用程序中创建列表。dragStart 属性在拖动 jqxListBox 控件中的项并按下鼠标按钮时触发。以下是 jqxListBox 的 dragStart 属性的详细说明: dragStart 属性 dragStart 属性在拖动 jqxListBox 控件中的项并按下鼠…

    jquery 2023年5月10日
    00
  • jQWidgets jqxWindow maxHeight属性

    关于jQWidgets jqxWindow组件的maxHeight属性,我来给您详细讲解一下。 1. maxHeight属性是什么 maxHeight是jQWidgets jqxWindow组件的一个属性,它是一个用来指定窗口最大高度的数字。当窗口高度超过最大高度时,会出现滚动条,避免窗口高度超出屏幕而无法显示。 具体属性定义如下: //HTML <d…

    jquery 2023年5月12日
    00
  • jQWidgets jqxMaskedInput promptChar属性

    jQWidgets jqxMaskedInput promptChar属性详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件工具包。jqxMaskedInput是其中之一。本文将详细介绍jqxMaskedInput的promptChar属性,包括用法、语法和示例。 promptChar属性的语法 jqxMaskedInput的pr…

    jquery 2023年5月10日
    00
  • jQWidgets jqxExpander expanded属性

    jQWidgets jqxExpander expanded属性 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件和工具包括表格下等。jqxExpander是jQWidgets的一个组件,用于创建可折叠的面板。jqxExpander提供了多个属性,其中括expanded属性。本文将详细介绍jqxExpander的expanded属性,…

    jquery 2023年5月9日
    00
  • jQuery UI按钮类选项

    jQuery UI的按钮小部件提供了许多选项,可以自定义按钮的外观和行为。其中,buttonClasses选项用于指定按钮使用的CSS类。本文将详细介绍buttonClasses选项的语法用法,并提供两个示例说明。 语法 以下是buttonClasses选项的基本法: $(selector).button({ buttonClasses: { "c…

    jquery 2023年5月9日
    00
  • jQuery页面刷新(局部、全部)问题分析

    下面是关于“jQuery页面刷新(局部、全部)问题分析”的完整攻略: 1. 为什么需要局部刷新? 在Web开发中,页面刷新对用户体验来说是很糟糕的。在一些Web应用中,如社交媒体,购物网站,消息系统等,经常需要更新页面上的某些部分,而不是整个页面刷新。这样能够提供更好的性能、更快的响应时间和更良好的用户体验。同时,这种局部刷新技术也称为Ajax技术。 2. …

    jquery 2023年5月27日
    00
  • jquery实现回车键触发事件(实例讲解)

    下面是详细讲解“jquery实现回车键触发事件(实例讲解)”的完整攻略。 jQuery实现回车键触发事件 在使用jQuery实现回车键触发事件时,可以绑定“keydown”事件,然后判断是否按下的是回车键。 示例代码如下: $(document).on("keydown", function (event) { if (event.key…

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