jq 下拉多选框的全选和取消全选

154 阅读2分钟

今天公司让我去优化一下老系统,是Jq框架的,有个需求优化是,将下拉框的数据改成多选框,并且有全选,再次点击之后取消全选。由于上一个开发的人跑路了,加上我本身对jq不太熟,这个小需求确实难到我了,先先后后百度查一下,都没有找到自己想要的答案。然后我就综合jq对 select 的操作,写了方法,最终解决了这个问题
话不多说,上代码

首先我们先来了解select的操作 jQuery获取Select选择的Text和Value:

  1. $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发

  2. var checkText=$("#select_id").find("option:selected").text(); //获取Select选择的Text

  3. var checkValue=$("#select_id").val(); //获取Select选择的Value

  4. var checkIndex=$("#select_id ").get(0).selectedIndex; //获取Select选择的索引值

  5. var maxIndex=$("#select_id option:last").attr("index"); //获取Select最大的索引值

jQuery添加/删除Select的Option项:

  1. $("#select_id").append("Text"); //为Select追加一个Option(下拉项)

  2. $("#select_id").prepend("请选择"); //为Select插入一个Option(第一个位置)

  3. $("#select_id option:last").remove(); //删除Select中索引值最大Option(最后一个)

  4. $("#select_id option[index='0']").remove(); //删除Select中索引值为0的Option(第一个)

  5. $("#select_id option[value='3']").remove(); //删除Select中Value='3'的Option

  6. $("#select_id option[text='4']").remove(); //删除Select中Text='4'的Option 原文链接:blog.csdn.net/liuzhaoyun/…

接下来看代码

html

<div class="col-sm-8"  id="workNoListCheckBox">
    <select class="form-control  select2-hidden-accessible" name="workNoList" id="workNoListBox" multiple="" required  >
        <option value=""></option>
    </select>
</div>

js

function selectWorkerByPrjCode() {
    var prjCode = $("#prjCode").val();
    var teamSysNo = $("#teamNo").val();
    var workTypeCode = $("#workTypeCode").val();
    if(prjCode){
        var data = {
            prjCode:prjCode,
            teamSysNo:teamSysNo,
            workTypeCode:workTypeCode
        }
        $.ajax({
            url : ctx + "system/sysServerOrder/getOrderRecordByWorkerNo",
            type : 'POST',
            data:data,
            success : function(data) {
                var workNoList = data.data;
                list = workNoList
                workNoList.splice(0,0, {workNo: "00", workName:"全部"})
                var workNoLists = $("#workNoListSelect").val();
                var workNoListArr = [];
                if(workNoLists){
                    workNoListArr = workNoLists.split(",");
                }

                var html = '';
                for (var i = 0; i < workNoList.length; i++) {
                    var worker = workNoList[i];
                    if(workNoListArr.indexOf(worker.workNo)>-1){
                        html += '<option selected="selected" value="'+worker.workNo+'">'+worker.workName+'</option>'
                    }else{
                        html += '<option value="'+worker.workNo+'">'+worker.workName+'</option>'
                    }
                }
                $("#workNoListBox").html(html);
            }
        });
    }
}

这里的js是取后端的数据来渲染option的value和text的值,这里注意了

image.png 后端返回的list是没有全部这个值,所以我们要自己加上去

select的选择事件

$('#workNoListBox').on('change',function (e) {
    if($.inArray("00", $("#workNoListBox").val()) === -1) {
        if ($.inArray("01", $("#workNoListBox").val()) === -1) {
        } else {
            for (var i = 0; i < document.edconfigform3.workNoList.length; i++) {
                document.edconfigform3.workNoList.options[i].selected = false;
            }
            $("#workNoListBox").prepend("<option value='00'>全选</option>")
            $("#workNoListBox option[value='01']").remove()
        }
    } else {
            for (var i = 0; i < document.edconfigform3.workNoList.length; i++) {
                document.edconfigform3.workNoList.options[i].selected = true;
            }
            $("#workNoListBox").prepend("<option value='01'>取消选择</option>")
            $("#workNoListBox option[value='00']").remove()
        }

    })

这里我们通过选择事件,获取所选的option的数据,进行一个判断

$.inArray("00", $("#workNoListBox").val()) === -1

我们上面有讲{workNo: "00", workName:"全部"}是我们自己加上去的,而这个.inArray则是判断所选都的.inArray则是判断所选都的("#workNoListBox").val() 是否有这个 '00'的值,如果没有,也就是没有点击全选 则返回-1 , 这里判断得到的是,他没有点这个全选, 那么我们就进行下一步判断

if ($.inArray("01", $("#workNoListBox").val()) === -1)

这里判断的是他有没有点击取消选择按钮(这里注意(01)是追加上去的一个option),如果没有,则进行的是常规的操作,如果有

 for (var i = 0; i < document.edconfigform3.workNoList.length; i++) {
                document.edconfigform3.workNoList.options[i].selected = false;
            }
             $("#workNoListBox").prepend("<option value='00'>全选</option>")
            $("#workNoListBox option[value='01']").remove()

这里的js是取消select选中的值,至于document.edconfigform3.workNoList则是 edconfigform3就是你绑定的form 的id ,workNoList就是你的select的值,我们取消后的一个操作就是把取消选择这个option给去掉,然后把全选option追加回来,

 else {
            for (var i = 0; i < document.edconfigform3.workNoList.length; i++) {
                document.edconfigform3.workNoList.options[i].selected = true;
            }
            $("#workNoListBox").prepend("<option value='01'>取消选择</option>")
            $("#workNoListBox option[value='00']").remove()
        }

同理,下面则是选中全选这个option之后的操作 然后就完美解决了