zoukankan      html  css  js  c++  java
  • 模拟select下拉框之多选(数据源采用模拟Ajax数据--原创)

    最近需要一个下拉多选,本来想偷懒的,所以在网上百度了一番,最终还是发现没有一个符合自己要求的,所以我自己写了一个插件。下面是GIF动态效果图展示

    相信大家已经看到效果了,接下来就是我的代码展示

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>模拟select下拉框之多选</title>
        <style>
            *{
                margin:0;
                padding:0;
            }
            ul,li{
                list-style: none;
            }
            #test{
                margin:20px 10px;
            }
            .clearfix:before,
            .clearfix:after{
                content: '';
                display: block;
                overflow: hidden;
                clear: both;
                height: 1px;
            }
            .fruitTitle{
                float: left;
                height: 30px;
                line-height: 30px;
                margin: 0 5px 0 20px;
            }
            .box1{
                position: relative;
                float: left;
                height: 30px;
            }
            .fruit1_ul1{
                display: inline-block;
                width:150px;
                height: 30px;
                line-height: 30px;
                padding: 0 0 0 8px;
                border:1px solid #bbb;
                border-radius: 4px;
                overflow: hidden;
                text-overflow: ellipsis;
                white-space: nowrap; /*文本不换行,这样超出一行的部分被截取,显示...*/
                cursor: pointer;
            }
            .multiFruit1{
                display: none;
                position: absolute;
                left:0;
                top:30px;
                min-width: 148px;
                padding: 0 5px;
                background: #fff;
                border:1px solid #bbb;
                margin-top: -1px;
                overflow-x: hidden;
                z-index: 10;
                max-height: 150px;
            }
            .multiFruit1 li{
                white-space:nowrap;
                height: 30px;
                line-height: 30px;
            }
            .multiFruit1 input,
            .multiFruit1 label{
                cursor: pointer;
                margin: 2px 4px 0 0;
                vertical-align: middle;
            }
            .txt_p{
                display: none;
                position: absolute;
                left: 0;
                border: 1px solid #bbb;
                text-align: right;
                height: 40px;
                line-height: 40px;
                z-index: 10;
                background: #fff;
            }
            .select_ok1{
                padding: 7px 9px;
                font-size: 14px;
                border-radius: 5px;
                border:none;
                margin:-2px 5px 0 0;
                background: #337ab7;
                color: #fff;
                cursor: pointer;
            }
        </style>
    </head>
    <body>
        <form action="#" method="" id="test" class="clearfix">
            <!-- 隐藏域存储所选水平品种的ID -->
            <input type="hidden" name="fruit1" id="fruits"/>
            <strong class="fl fruitTitle">水果品种</strong>
          <div class="box1">
                <span class="fruit1_ul1">请选择水果</span>
                <ul class="multiFruit1">
                </ul>
            </div>
        </form>
        <script>
            //JSON对象fruit_variety模拟Ajax数据源
            var fruit_variety = [{fruitID:1,fruitName:"苹果"},{fruitID:2,fruitName:""},{fruitID:3,fruitName:"西瓜"},{fruitID:4,fruitName:"哈密瓜"},{fruitID:5,fruitName:"草莓"},{fruitID:6,fruitName:"龙眼"},{fruitID:7,fruitName:"火龙果"},{fruitID:8,fruitName:"樱桃"},{fruitID:9,fruitName:"橘子"},{fruitID:10,fruitName:"水蜜桃"}];
        </script>
        <script src="jquery-1.7.2.js"></script>
        <script>
            $(function(){
                //生成多选下拉
                function multiSelect(obj1,obj2){
                    for(var i=0;i<obj2.length;i++){
                        var input = document.createElement('input');
                        input.setAttribute('type','checkbox');
                        input.setAttribute('name','fruit_name');
                        input.setAttribute('id',obj2[i].fruitID);
                        input.setAttribute('value',obj2[i].fruitID);
                        var label = document.createElement('label');
                        label.setAttribute('for',obj2[i].fruitID);
                        label.innerHTML = obj2[i].fruitName;
                        var li = document.createElement('li');
                        li.append(input);
                        li.append(label);
                        $(obj1).append(li);
                    }
                    var btn = document.createElement('input');
                    btn.setAttribute("type","button");
                    btn.className = 'select_ok1';
                    btn.setAttribute("value","确定");
                    var p = document.createElement('p');
                    p.className = 'txt_p';
                    p.append(btn);
                    $(obj1).parent().append(p);
                }
                multiSelect('.multiFruit1',fruit_variety);
                $(document).click(function(){
                    $('.multiFruit1').hide();//隐藏下拉框
                    $('.txt_p').hide();//隐藏确认按钮
                    $('.multiFruit1 input').attr('checked',false);
                    var v = $('#fruits').val();
                    if(v != ''){
                        //获取保存的选中值,并保存默认选中
                        var selectedNum = v.split(',');
                        for(var i=0;i < selectedNum.length;i++){
                            for(var j=0;j<$('.multiFruit1 input').size();j++){
                                if($('.multiFruit1 input').eq(j).val() == selectedNum[i]){
                                    $('.multiFruit1 input').eq(j).attr("checked",true);
                                }
                            }
                        }
                    }
                })
                $('.box1').click(function(e){
                    e = e || window.event;
                    if (e.stopPropagation) {
                        e.stopPropagation();
                    }else{
                        e.cancelBubble = true; //IE
                    }
                    var w = $('.multiFruit1').innerWidth();
                    var t = $('.multiFruit1').innerHeight() + $('.fruit1_ul1').innerHeight();
                    $('.txt_p').css('width',w);
                    $('.txt_p').css('top',t);
                    $('.multiFruit1').show();
                })
                $('.fruit1_ul1').click(function(){
                    $('.txt_p').show();
                })
                $('.select_ok1').click(function(e){
                    e = e || window.event;
                    if (e.stopPropagation) {
                        e.stopPropagation();
                    }else{
                        e.cancelBubble = true; //IE
                    }
                    $('.multiFruit1').hide();
                    $('.txt_p').hide();
                    var value = '';
                    var str = '';
                    //将选中的值保存到value
                    for(var i=0;i<$('input[name="fruit_name"]').size();i++){
                        if($('input[name="fruit_name"]').eq(i).attr('checked')){
                            value += ',' + $('input[name="fruit_name"]').eq(i).attr('value');
                            str += ',' + $('input[name="fruit_name"]').eq(i).siblings('label').html();
                        }
                    }
                    //采用substr去除第一个逗号分隔符
                    value = value.substr(1);
                    str = str.substr(1);
                    //将value的值赋值给input隐藏域
                    $('#fruits').val(value);
                    //将str的值赋值给显示框隐藏域
                    $('.fruit1_ul1').html(str);
                })
            })
        </script>
    </body>
    </html>

    代码中有注释,如果有看不懂或者出现问题的可以留言问我,有空一定解答。

  • 相关阅读:
    C艹老师布置的思考题
    计蒜客练习题:网页跳转(java / C++仔细)
    计蒜客练习题:水果店(嵌套map)
    计蒜客练习题:蒜头君面试(map + max_element)
    小希的迷宫 HDU 1272(并查集)
    OpenJ_Bailian 1061
    Aizu 2224(并查集)
    Aizu 0189 (最短路)
    POJ 2377(最大生成树)
    OpenJ_Bailian 4118(dp)
  • 原文地址:https://www.cnblogs.com/webBlog-gqs/p/6833491.html
Copyright © 2011-2022 走看看