• JS实现带复选框的下拉菜单


    这段时间在做后台的时候需要一个可以复选的下拉菜单,用到的是easyUI中的combo的Demo,先看看官方easyUI:http://www.jeasyui.com/documentation/index.php#

    --------------------------------------------------------------------------------------------------------------------------------------------------------------

    下面就来具体的实现:首先说一下需要的文件(直接上图):

    其中最下面easyui.css和两个JS文件就在easyUI的官网(http://www.jeasyui.com/download/index.php)上下载,

    官方文档的截图:

    其他的代码附:

    注意:

    demo.css文件在下载的文件中有好几个,用的是themes下的default文件下的

     1 *{
     2     font-size:12px;
     3 }
     4 body {
     5     font-family:verdana,helvetica,arial,sans-serif;
     6     padding:20px;
     7     font-size:12px;
     8     margin:0;
     9 }
    10 h2 {
    11     font-size:18px;
    12     font-weight:bold;
    13     margin:0;
    14     margin-bottom:15px;
    15 }
    16 .demo-info{
    17     padding:0 0 12px 0;
    18 }
    19 .demo-tip{
    20     display:none;
    21 }

    baseic.html

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Basic Combo - jQuery EasyUI Demo</title>
        <link rel="stylesheet" type="text/css" href="easyui.css">
        <link rel="stylesheet" type="text/css" href="demo.css">
        <script type="text/javascript" src="jquery.min.js"></script>
        <script type="text/javascript" src="jquery.easyui.min.js"></script>
    </head>
    <body>
        <select id="cc" style="150px"></select>
        <div id="sp">
            <div style="color:#99BBE8;background:#fafafa;padding:5px;">请选择渠道</div>
            <div style="padding:5px">
                <input type="checkbox" name="lang" value="01"><span>天天挖坑</span><br />
                <input type="checkbox" name="lang" value="02"><span>爱游戏</span><br />
                <input type="checkbox" name="lang" value="03"><span>沃商店</span><br />
                <input type="checkbox" name="lang" value="04"><span>咪咕</span>
                
            </div>
        </div>
        <script type="text/javascript">
            $(function () {
                var s = ",";//设定分隔付
                $('#cc').combo({
                    required: true,//是否验证
                    editable: true,//是否可编辑
                    multiple: true//可否支持多选
                });
                $('#sp').appendTo($('#cc').combo('panel'));
                $('#sp input').click(function () {
                    var v = $(this).next('span').text();
                    if ("," == s||""==s) {//第一次勾选时起作用
                        s = $(this).next('span').text();
                    }
                    else if (-1 < s.indexOf(v)) {//当去掉勾选时起作用  Indexof:返回某个指定的字符串值在字符串中首次出现的位置
                        var n = s.indexOf(v);
                        var m = s.indexOf(v) + v.length;
                        if (0 == s.indexOf(v)) {//取消第一个点击的勾选
                            s = s.substring(n + v.length + 1, s.length);
                        } else if (0 < s.indexOf(v) && ((s.indexOf(v) + v.length) < s.length)) {//取消非第一个和最后一个的勾选
                            s = s.substring(0, n) + s.substring(n + v.length + 1, s.length);
                        } else {//取消最后一个的勾选
                            s = s.substring(0, n - 1);
                        }
                    }
                    else {
                        s = s + "," + $(this).next('span').text();//将勾选各值拼接
                        
                    }
                    $('#cc').combo('setValue', s).combo('setText', s).combo('showPanel');//将值赋值给文本框并在文本里显示出来
                });
            });
        </script>
    </body>
    </html>
    

    看一下效果图:

    -----------------------------------------------------------------------------------------------------------------------------------------------------------

    附:下面这是方便提交表单向提交页提交的是各项的ID,而不是文本,需要的看一下:

     1 <td>
     2                                 <select id="cc" style="150px"></select>
     3                                 <div id="sp">
     4                                     <div style="color:#99BBE8;background:#fafafa;padding:5px;">请选择渠道</div>
     5                                     <div style="padding:5px">
     6                                         @{
     7                                             foreach (var item in ViewData["channelList"] as List<Channel>)
     8                                             {
     9                                                 int channel = item.ChannelID+1;
    10                                                 <input type="checkbox" name="lang" value="@item.ChannelID"><span >@item.ChannelName</span><br />
    11                                              }
    12                                         }
    13                                     </div>
    14                                 </div>
    15 
    16                                 <script type="text/javascript">
    17                                     $(function () {
    18                                         var s = ",";//设定分隔付
    19                                         var channelID = ",";
    20                                         $('#cc').combo({
    21                                             required: true,//是否验证
    22                                             editable: true,//是否可编辑
    23                                             multiple: true//可否支持多选
    24                                         });
    25                                         $('#sp').appendTo($('#cc').combo('panel'));
    26                                         $('#sp input').click(function () {
    27                                             var v = $(this).next('span').text();
    28                                             var IDstr = $(this).val();
    29                                             if ("," == s || "" == s) {//第一次勾选时起作用
    30                                                 s = $(this).next('span').text();
    31                                                 channelID = $(this).val();
    32                                             }
    33                                             else if (-1 < s.indexOf(v)) {//当去掉勾选时起作用  Indexof:返回某个指定的字符串值在字符串中首次出现的位置
    34                                                 var n = s.indexOf(v);
    35                                                 var m = s.indexOf(v) + v.length;
    36                                                 var p = channelID.indexOf(IDstr);
    37                                                 if (0 == s.indexOf(v)) {//取消第一个点击的勾选
    38                                                     s = s.substring(n + v.length + 1, s.length);
    39                                                     channelID = channelID.substring(n + IDstr.length + 1, channelID.length);
    40                                                 } else if (0 < s.indexOf(v) && ((s.indexOf(v) + v.length) < s.length)) {//取消非第一个和最后一个的勾选
    41                                                     s = s.substring(0, n) + s.substring(n + v.length + 1, s.length);
    42                                                     channelID = channelID.substring(0, p) + channelID.substring(p + IDstr.length + 1, channelID.length);
    43                                                     
    44                                                 } else {//取消最后一个的勾选
    45                                                     s = s.substring(0, n - 1);
    46                                                     channelID = channelID.substring(0, p - 1);
    47                                                 }
    48                                             }
    49                                             else {
    50                                                 s = s + "," + $(this).next('span').text();//将勾选各渠道名称拼接
    51                                                 channelID = channelID + "," + $(this).val();//将勾选各渠道ID拼接
    52                                             }
    53                                            
    54                                             $('#cc').combo('setValue', s).combo('setText', s).combo('showPanel');//将值赋值给文本框并在文本里显示出来
    55                                             document.getElementById("hidden_channel").value = channelID;
    56                                         });
    57                                     });
    58                                 </script>
    59                                 <input id="hidden_channel" type="hidden" name="channel" />
    60                             </td>

    ok,完成,如果有问题或者优化建议联系QQ:2384834530

  • 相关阅读:
    开发实例
    一张图解析FastAdmin中的表格列表的功能
    fastAdmin进阶
    detailFormatter bootstrapTable
    responseHandler
    自定义PDO封装类
    bootstrapTable
    Thread Safety
    FastAdmin 基本知识流程一栏
    thinkphp5 Request请求类
  • 原文地址:https://www.cnblogs.com/Steven-shi/p/5111686.html
Copyright © 2020-2023  润新知