mutiselect2side实现

前一阵子弄mutiselect2side的框框,搞了好长一段时间,现在分享一下。初学者,大神勿吐槽。

mutiselect2side这个Jquery有插件,插件我改了一下,能好看一点,IE6的那个问题也改了。资源里搜一下select2side就行。

首先界面设计,其中使用了Bootstrap的class插件。

<!-- Dialog 批量选课模式框 -->
<div id="batchadd_dialog" class="modal hide fade width6" role="dialog">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">×</button>
        <strong>批量选课</strong>
    </div>
    <div id="batchaddform">
        <div class="modal-body">
            <div class="form-group has-success">
                <input class="input-medium search-query" type="text" id="number_" name="number_" placeholder="学生学号或姓名">
                <button type="button" class="btn btn-info" οnclick="Add2Select()">待选</button>
                <span id="validstudent" class="text-error"></span>
            </div>
            <br>
            <table class="table table-bordered table-condensed search width5">
                <tr>
                    <td width="20%">课程号</td>
                    <td>
                        <input type="text" id="course_" name="course_" value="{{o.arrange.course.code}}" class="input-small" placeholder="请输入课程号/名">
                        <span id="validcourse"></span>
                    </td>
                </tr>
                <tr>
                    <td width="20%">课序号</td>
                    <td>
                        <input type="text" id="sequence_" name="sequence_" value="{{o.arrange.sequence}}" class="input-small" placeholder="请输入课序号">
                        <span id="validsequence"></span>
                    </td>
                </tr>
            </table>
            <br>
            <div id="select">
                <select multiple="multiple" id="stuselect" name="stuselect" size="8">
                </select>
            </div>
        </div>
        <div class="panel panel-primary">
            <span id="count"></span>
            <span id="message"></span>
        </div>
        <div class="modal-footer">
            <button class="btn btn-primary" οnclick="OnSubmit()">添加</button>
            <button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">取消</button>
        </div>
    </div>
</div>
其他对话框显示和数据转换是通过javascript和ajax进行,代码如下,需要在script中引入两个插件
<!-- multiselect2side Js and Css -->
<script type="text/javascript" src="/static/lib/jquery/jquery.multiselect2side.js"></script>
<link rel="stylesheet" type="text/css" href="/static/lib/jquery/jquery.multiselect2side.css" />
<script type="text/javascript">
    //批量选课相关操作
    $(document).ready(function(){
        autocomplete_course('course_', 'validcourse', 10);
        autocomplete_student('number_', 'validstudent', 10);

        // 批量选课对话框显示
        $("#batchadd").click(function(e){
            e.preventDefault();
            $("#batchadd_dialog").modal("show");
        });

        // multipselect2side 显示
        $("#stuselect").multiselect2side({
            selectedPosition: 'right',
            moveOptions:true,
            labelsx: '待选学生',
            labeldx: '已选学生',
        });
    });
    // 必选字段验证
    $("#batchaddform").validate({
        errorClass :"validate-error",
        rules:{
            course_:{
                required:true,
                remote:{
                    url:"/course/ajax_check_course/",
                    type:"get",
                    dataType:"json",
                    data:{
                        code:function(){return $("#course_").val();}
                    }
                }
            },
            sequence_:{
                required: true,
                digits:true,
                remote:{   
                        url: "/selection/ajax_check_arrange/", //后台处理程序    
                        type: "get",  //数据发送方式   
                        dataType: "json",       //接受数据格式       
                        data:  {
                            code:function(){return $("#course_").val()},
                            sequence:function(){return $("#sequence_").val()}
                        }
                    }
            }
        },
        //false 数据处理信息
        messages:{
            course_:{    remote:"课程不存在!" },
            sequence_:{  remote:"课序号不存在!"}
        }
    });

    // 通过学号搜索学生并返回学生信息,无相关信息输出错误提醒
    function Add2Select(){  
        $.ajax({
            url:"/census/ajax_get_student/", 
            dataType:"json",
            data:{'code':$("#number_").val()},
            type:"get",
            success:function(data){
                // 数据传到选择框备选框
                var json = eval(data);//数组  
                $.each(json, function (index, item) {  
                 //循环获取数据   
                    var code = json[index].code; 
                    var name = json[index].name;
                    var college_name = json[index].college_name;
                    $("#stuselectms2side__sx").append("<option value='"+code+"'><br>"+ name + "(" + code +"),("+college_name+")"+"<br/></option>"); 
                });
            },
        }); 
    };

    function OnSubmit(){
        var course = $("#course_").val();
        var sequence = $("#sequence_").val();
        var students;
        $("[name='stuselectms2side__dx[]']").each(function(){
            students = $(this).val();
        });
        $.ajax({
            url:"/supervise/selection/outcome/ajax_batchadd/",
            dataType:"json",
            data:{
                "course":course,
                "sequence":sequence,
                "students":students,
            },
            type:"get",
            success:function(data){
                $("#count").html(data.count+"人选课成功").css({color:'green'})
                $("#message").html("").css({color:"red"})
                if(data.ret != '')
                    $("#message").append(data.ret + "学籍不存在").css({color:'red'})
                if(data.msg != '')
                    $("#message").append(data.msg + "已选").css({color:'red'})
                if(data.cannot != '')
                    $("#message").append(data.cannot).css({color:'red'})
            }
        });
    }

</script>

autocomplete_course和autocomplete_student两个函数是两个自动查询完善的ajax函数。重点说明mulitselect2side,

<div id="select">
                <select multiple="multiple" id="stuselect" name="stuselect" size="8">
                </select>
            </div>
是使用插件的语句,
        // multipselect2side 显示
        $("#stuselect").multiselect2side({
            selectedPosition: 'right',
            moveOptions:true,
            labelsx: '待选学生',
            labeldx: '已选学生',
        });
是调用。
$("#stuselectms2side__sx").append("<option value='"+code+"'><br>"+ name + "(" + code +"),("+college_name
+")"+"<br/></option>");
是将语句写入左匡,左框插件中命名为XXXms2side__sx,右框命名为XXXms2side__dx[],XXX为上面select中的名字,此处为


stuselect。
OnSubmit函数是提交后台处理,处理过程中模式框不消失。
        var students;
        $("[name='stuselectms2side__dx[]']").each(function(){
            students = $(this).val();
        });


是获取要提交的多个数据,保存在students变量中,数据通过ajax处理。
url:"/supervise/selection/outcome/ajax_batchadd/",
这个连接../outcome/是目前界面url,最后ajax_batchadd是数据处理函数,接收OnSubmit提交数据。
        code = request.GET.get("course")
        sequence = request.GET.get("sequence")
        students = request.GET.getlist('students[]')
处理直接循环学生就行。
for student in students:
处理。。

效果如图:

注明:所用语言为python。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值