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

原文地址:https://www.cnblogs.com/Steven-shi/p/5111686.html