• 两个list框联动-转载


    下面记录下开发过程中的代码,便于后续使用。
    
    
    1、多选下拉框,实现左右联动选择,其中引用了bootstrap样式的网络资源,使用时需保证网络可用。
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <link rel="stylesheet" href="http://cdn.bootcss.com/twitter-bootstrap/3.0.3/css/bootstrap.min.css">
    <link rel="stylesheet" href="http://cdn.bootcss.com/twitter-bootstrap/3.0.3/css/bootstrap-theme.min.css">
    <script src="http://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
    <script src="http://cdn.bootcss.com/twitter-bootstrap/3.0.3/js/bootstrap.min.js"></script>
    <script type="text/javascript">
    
    //使用jquery,实现select录入域的左右双选
    $(function(){
        
        //移到右边
        $('#add').click(function(){
            //获取选中的选项,删除并追加给对方
            $('#select1 option:selected').appendTo('#select2');    
        });
        
        //移到左边
        $('#remove').click(function(){
            $('#select2 option:selected').appendTo('#select1');
        });
        
        //全部移到右边
        $('#add_all').click(function(){
            //获取全部的选项,删除并追加给对方
            $('#select1 option').appendTo('#select2');
        });
        
        //全部移到左边
        $('#remove_all').click(function(){
            $('#select2 option').appendTo('#select1');
        });
        
        //双击选项
        $('#select1').dblclick(function(){ //绑定双击事件
            //获取全部的选项,删除并追加给对方
            $("option:selected",this).appendTo('#select2'); //追加给对方
        });
        
        //双击选项
        $('#select2').dblclick(function(){
            $("option:selected",this).appendTo('#select1');
        });
        
    });
    
    </script>
    
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
        <td style=" 270px; height: 18px;">
          地域:
        </td>
        <td  colspan="3"> 
            <select name="select1" style="200px;height:200px" multiple="multiple" id="select1">
                <option>A</option>
                <option>B</option>
                <option>C</option>
                <option>D</option>
            </select>
            <span id="add"><input type="button" class="btn" value=">"/></span>
            <span id="add_all"><input type="button" class="btn" value=">>"/></span>
            <span id="remove"><input type="button" class="btn" value="<"/></span>
            <span id="remove_all"><input type="button" class="btn" value="<<"/></span>
            <select name="select2" style="200px;height:200px" multiple="multiple" id="select2"></select>
        </td>
    </body>
    </html>
    
    2、通过AJAX实现二级联动,不多说,看代码
    a、通过调用checkBox方法,启用ajax通过参数获取后台数据。
    
    /**
     * 使用ajax实现二级联动效果
     * @param province
     */
    function change_checkBox(province) { 
        var province = province.value;
        var url = "getCity?proviceId=" + province;
        if (window.XMLHttpRequest) {
            req = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            req = new ActiveXObject("Microsoft.XMLHTTP");
        }
        if (req) {
            req.open("POST", url, true);
            //指定回调函数为callback  
            req.onreadystatechange = callback;
            req.send(null);
        }
    }
    //回调函数  
    function callback() {
        if (req.readyState == 4) {
            if (req.status == 200) {
                parseMessage(); //解析XML文档  
            } else {
                alert("不能得到描述信息:" + req.statusText);
            }
        }
    }
    //解析返回xml的方法  
    function parseMessage() {
        var xmlDoc = req.responseXML.documentElement; //获得返回的XML文档  
        var xSel = xmlDoc.getElementsByTagName('select');
        //获得左侧下拉框数据  
        var select_left = document.getElementById('select1');
        //获得右侧下拉框数据  
        var select_right = document.getElementById('select2');
        //获得网页中的第二个下拉框  
        select_left.options.length = 0;
        //每次获得新的数据的时候先把每二个下拉框架的长度清0  
        for (var i = 0; i < xSel.length; i++) {
            var flag = true;
            var xValue = xSel[i].childNodes[0].firstChild.nodeValue;
            //获得每个<select>标记中的第一个标记的值,也就是<value>标记的值  
            var xText = xSel[i].childNodes[1].firstChild.nodeValue;
            //获得每个<select>标记中的第二个标记的值,也就是<text>标记的值  
            for (var j = 0; j < select_right.options.length; j++) {
                // 校验是否已经选过此城市
                if(select_right.options[j].value == xValue){
                    flag = false;
                }
            }
            if(flag == true){
                var option = new Option(xText, xValue);
                //根据每组value和text标记的值创建一个option对象  
                try {
                    select_left.add(option); //将option对象添加到第二个下拉框中  
                } catch(e) {}
            }
        }
    }
    
    b、我后台用struts2,后台将关联在二级下拉框的数据已XML的形式进行组装,然后写到respose内,在通过a步骤的回调函数进行XML解析。
    package com.haier.action;
    
    import java.util.List;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.haier.bean.AdvCityDto;
    import com.haier.timer.GetChannelInfo;
    import com.opensymphony.xwork2.ActionSupport;
    /**
     * 查询地域信息ACTION
     * @author gaopeng
     *
     */
    public class ADAreaAction extends ActionSupport {
    
        public String getCity() throws Exception {
            HttpServletResponse response = ServletActionContext.getResponse();
            // 读取请求的参数
            HttpServletRequest request = ServletActionContext.getRequest();
            System.out.println("dopost");
            response.setContentType("text/xml");
            response.setHeader("Cache-Control", "no-cache");
            request.setCharacterEncoding("GBK");
            response.setCharacterEncoding("UTF-8");
            String proviceId = request.getParameter("proviceId").toString();
            System.out.println(proviceId);
            // 获得请求中参数为id的值
            String xml_start = "<selects>";
            String xml_end = "</selects>";
            StringBuffer sb = new StringBuffer();
            String xml = "";
            // 市级列表
            List<AdvCityDto> cityList = GetChannelInfo.CACHE_CITY_LIST;
    
            for (AdvCityDto advCityDto : cityList) {
                if (proviceId.equals(advCityDto.getProid())) {
                    sb.append("<select><value>" + advCityDto.getCid()
                            + "</value><text>" + advCityDto.getCname()
                            + "</text></select>");
                }
            }
            xml = sb.toString();
    
            String last_xml = xml_start + xml + xml_end;
            response.getWriter().write(last_xml);
    
            return null;
        }
    }
    
    
    我实现功能的截图:
    
    
    
    以上的代码都是从网上组织,然后进行了改造。
    
    二级联动参考:http://blog.csdn.net/supercrsky/article/details/8539123
    
    
    
    
     
  • 相关阅读:
    第一次随笔
    SDN第二次上机作业
    SDN第二次作业
    个人作业——软件产品案例分析
    SDN第一次上机作业
    SDN第一次作业
    个人技术博客(1/2)android布局技巧
    个人技术博客(α)
    团队作业——随堂小测(同学录)
    Alpha冲刺报告(2/12)(麻瓜制造者)
  • 原文地址:https://www.cnblogs.com/honghong75042/p/12553313.html
Copyright © 2020-2023  润新知