jquery制作带checkbox下拉多选

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>下拉多选</title>
    <script src="jquery-1.9.1.js"></script>
  </head>
  <body>

<input class="hideVal" type="text" id="Countryval">
<div id="divCountry" name="divCountry" class="CheckMore">
  <div class="selectStr" id="divCountryVal"><span class="empty">— — </span><em><i class="iconfont icon-jiantou"></i></em></div>
  <div class="Countryselect">
    <div class="title">
      <label>
        <i class='iconfont icon-weixuanze'></i><i class='iconfont icon-xuanze1'></i>
        <input type="checkbox" name="" id="theadInp">All/deselect all
      </label>
    </div>
    <ul class="coutryList" id="coutryList">
      <li class="on"><label><i class="iconfont icon-weixuanze"></i><i class="iconfont icon-xuanze1"></i><input type="checkbox" name="" value="China" >China</label></li>
      <li><label><i class="iconfont icon-weixuanze"></i><i class="iconfont icon-xuanze1"></i><input type="checkbox" name="" value="UK" >UK</label></li>
    </ul>
  </div>
</div>
</body>
</html>

上面为Html部分,需要引入jquery

  $(function(){
    $(".selectStr").bind("click", function () {
      $(this).parent(".CheckMore").toggleClass("on");
    })
    countryList("divCountry","Countryval");//获取所有选中的值
    documentclick("divCountry");//点击其他地方下拉隐藏
    checkAll("theadInp", "divCountry","Countryval");//点击全选
    singleCheckbox("divCountry","Countryval");//单个选择
    setcountryList("divCountry", "China","Countryval")//编辑状态赋值

    function countryList(name,targetname) {
      $("#" + name + " .coutryList li").removeClass("on");
      var str = "";
      $("#" + name + " .coutryList input:checked").each(function () {
        str += $(this).val() + ",";
        $(this).parent("label").parent("li").addClass("on");
      })
      if (str.substr(str.length - 1, 1) == ",") {
        str = str.substring(0, str.length - 1);
      }
      console.log(str);
      if (str == "") {
        $("#" + name + " .selectStr span").html("— — ");
        $("#"+targetname).val("");
      } else {
        $("#"+targetname).val(str);
        $("#" + name + " .selectStr span").html(str);
      }
    }

    function checkAll(clickname, boxname,targetname) {
      $("#" + clickname).change(function () {
        $("#" + boxname + " .coutryList input:checkbox").prop("checked", $(this).prop('checked'));
        if ($(this).is(":checked")) {
          $("#" + boxname + " .Countryselect .title").addClass("on");
        } else {
          $("#" + boxname + " .Countryselect .title").removeClass("on");
        }
        countryList(boxname,targetname);
      })
    }

    function singleCheckbox(name,targetname) {
      $("#" + name + " .coutryList input:checkbox").on('click', function () {
        countryList(name,targetname);
        if ($("#" + name + " .coutryList input:checkbox").length === $("#" + name + " .coutryList input:checked").length) {
          $("#" + name + " .title input").prop("checked", true);
          $("#" + name + " .Countryselect .title").addClass("on");
        } else {
          $("#" + name + " .title input").prop("checked", false);
          $("#" + name + " .Countryselect .title").removeClass("on");
        }
      })
    }

    function documentclick(name) {
      $(document).bind('click', function (e) {
        var e = e || window.event; //浏览器兼容性 
        var elem = e.target || e.srcElement;
        while (elem) { //循环判断至跟节点,防止点击的是div子元素 
          if (elem.id && elem.id == name) {
            return;
          }
          elem = elem.parentNode;
        }
        $('#' + name).removeClass("on");; //点击的不是div或其子元素 
      });
    }

    function setcountryList(name, string,targetname) {
      var newArr = string.split(",");
      $("#" + name + " .coutryList input").each(function () {
      var thisinputVal = $(this).val();
      for (var i = 0; i < newArr.length; i++) {
        if (thisinputVal == newArr[i]) {
          $(this).parent("label").parent("li").addClass("on");
          $(this).prop("checked", true)
        }
      }
    })

    countryList(name,targetname)
    }
  })

上面为js部分,由于是封装的,如果没有特殊需要请不要改动html布局,改动后可能由于获取不到值而发生错误

下面为辅助的css部分,采用阿里图标做装饰

*{padding:0 0;margin:0 0;}
/*iconfont*/
@font-face {font-family: "iconfont";
  src: url('//at.alicdn.com/t/font_651952_5l1nv1paksm7vi.eot?t=1527043104477'); /* IE9*/
  src: url('//at.alicdn.com/t/font_651952_5l1nv1paksm7vi.eot?t=1527043104477#iefix') format('embedded-opentype'), /* IE6-IE8 */
  url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAXQAAsAAAAACIwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFZW7kg3Y21hcAAAAYAAAABwAAABsv89029nbHlmAAAB8AAAAdEAAAIo3srAG2hlYWQAAAPEAAAALwAAADYRdS49aGhlYQAAA/QAAAAcAAAAJAfeA4ZobXR4AAAEEAAAABMAAAAUE+kAAGxvY2EAAAQkAAAADAAAAAwBTgGybWF4cAAABDAAAAAeAAAAIAEUAF1uYW1lAAAEUAAAAUUAAAJtPlT+fXBvc3QAAAWYAAAANgAAAEvFMBxWeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/s04gYGVgYOpk+kMAwNDP4RmfM1gxMjBwMDEwMrMgBUEpLmmMDgwVDzzYm7438AQw9zA0AAUZgTJAQAp0wy5eJzFkbENgDAMBM8hIITomYCOIaiZhYqKib0GfGIKmIC3Lnq/rCRKgBZoxCIy2IFRtCu1mjcMNc+s6gd6kur0yWffrkvZ24dMc1HFZ+2RZDp+k/139FdjXden04tzPuiKPgUl9zkov+NbQLoBjPUVdHicTVE9j9NAEN3ZPXudI7HxruOvxLE3yXnvdBB0juM7CV2uiUAgCiQqSigjQUlAonCDRIEQ1UFDA0h0FFSATqKhhg5KhED8CuKwIRRZjfaN5j3Nm9EgDaHFD3JCfMTRNtpDE3QVIdB3oWviCITMB3gXmkJreo5JZE8K2usOyCF4Xd1xsyJPPZ3qFpjQgaHICjnAEkb5GJ+HzI0AglZ4jW21GXkCm77sPKgu4xfQjHtta3y2unTmyMkSbszqjAWMPTJ0TTMw3rBMuOW5Na22qVevNCtsnsQ7OIZ6IMMr1xtJi914mN+OtrwaQFkCbyXm6yM7tFXcD13OAnq6Yfhho9d3YPbrlM/rUfoTqYeXH3mD3yOmtkVcZK6aXs0uUwlpsV94e0/xl3gbgFXP+UFQ06pntuE7Ln6304l4lfoG0w34HhxwC1b9Fh/JJ3IRWShW/ewOeGIM+/YApDCBqlSokq1SoUp3IWnjY78PCufTdnKIJ0N8PJxghfPpEj/Ppyt6Jev76+Rk+H+HRbmBSKk8E3Wppc+aLwG9ew7SvMhigCJzHfLyzwc5AhhJcuEf3qkeG4z+piajX+Em5SYpFbkuqt5WM6oUzKLf4J4SKtu/2FdcRwAAAHicY2BkYGAAYh2h5N3x/DZfGbhZGEDgutZXBQT9v4GFgbkByOVgYAKJAgAEHwlJAHicY2BkYGBu+N/AEMPCAAJAkpEBFbACAEcLAm54nGNhYGBgfsnAwMKAwAAOmwD9AAAAAAAAdgCeANgBFHicY2BkYGBgZQgEYhBgAmIuIGRg+A/mMwAAES0BcgAAeJxlj01OwzAQhV/6B6QSqqhgh+QFYgEo/RGrblhUavdddN+mTpsqiSPHrdQDcB6OwAk4AtyAO/BIJ5s2lsffvHljTwDc4Acejt8t95E9XDI7cg0XuBeuU38QbpBfhJto41W4Rf1N2MczpsJtdGF5g9e4YvaEd2EPHXwI13CNT+E69S/hBvlbuIk7/Aq30PHqwj7mXle4jUcv9sdWL5xeqeVBxaHJIpM5v4KZXu+Sha3S6pxrW8QmU4OgX0lTnWlb3VPs10PnIhVZk6oJqzpJjMqt2erQBRvn8lGvF4kehCblWGP+tsYCjnEFhSUOjDFCGGSIyujoO1Vm9K+xQ8Jee1Y9zed0WxTU/3OFAQL0z1xTurLSeTpPgT1fG1J1dCtuy56UNJFezUkSskJe1rZUQuoBNmVXjhF6XNGJPyhnSP8ACVpuyAAAAHicY2BigAAuBuyAlZGJkZmRhZGVkY2BsYI9KzMxryS/lLM8NbOiNDGvKpUdQhkyMAAAqjgKYQAA') format('woff'),
  url('//at.alicdn.com/t/font_651952_5l1nv1paksm7vi.ttf?t=1527043104477') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
  url('//at.alicdn.com/t/font_651952_5l1nv1paksm7vi.svg?t=1527043104477#iconfont') format('svg'); /* iOS 4.1- */
}

.iconfont {
  font-family:"iconfont" !important;
  font-size:16px;
  font-style:normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.icon-jiantou:before { content: "\e64a"; }

.icon-weixuanze:before { content: "\e625"; }

.icon-xuanze1:before { content: "\e617"; }


#divCountry{position:relative;width:200px;margin:100px auto;border:1px solid #000;border-radius:5px;height:30px;line-height:30px;}
.Countryselect{position:absolute;border:1px solid #afd7ff;border-top: 0;overflow-y:auto;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12);box-sizing:border-box;padding:0;left:0;width:100%;z-index:99;background-color:#fff;display:none}
#divCountry.on .Countryselect{display:block;animation-name:layui-upbit;animation-duration:.3s;animation-fill-mode:both}
.coutryList li{line-height:36px;height:36px;padding:0 15px}
.Countryselect .title{height:36px;line-height:36px;padding:0 10px}
.Countryselect .title input,.coutryList li input{float:left;position:relative;top:10px;margin-right:5px}
.coutryList li label{display:block;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.coutryList li.on{background-color:#eaeff4}
.coutryList li label input {display:none;}
.coutryList li label i {float:left;color:#009a27;margin-right:10px;}
.coutryList li label i.icon-weixuanze{display:block;}
.coutryList li.on label i.icon-weixuanze{display:none;}
.coutryList li label i.icon-xuanze1{display:none;}
.coutryList li.on label i.icon-xuanze1{display:block;}

.Countryselect .title label{display:block;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.Countryselect .title.on{background-color:#eaeff4}
.Countryselect .title label input {display:none;}
.Countryselect .title label i {float:left;color:#009a27;margin-right:10px;}
.Countryselect .title label i.icon-weixuanze{display:block;}
.Countryselect .title.on label i.icon-weixuanze{display:none;}
.Countryselect .title label i.icon-xuanze1{display:none;}
.Countryselect .title.on label i.icon-xuanze1{display:block;}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值