DWR可扩展无级级连下拉菜单的代码例子

此类级连下拉列表常用到,此处的代码其实是由ssh框架写成,由于代码比较多,我只取了前端的js脚本和dwr配置文件。其它的代码大家自己意会:)

本代码的亮点:

1、经过极少的修改就可以应用于N级下拉列表。

2、采用了自动判断是否要隐藏控件达到醒目的效果。

3、各类浏览器兼容性好

 

 

dwr.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
 "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
 "http://getahead.org/dwr/dwr20.dtd">
<dwr>
    <allow>
        <!-- 转换要在映射对象中使用的类 -->
        <convert match="cn.qdqn.demo.biz.Databiz" converter="bean" />
        <convert match="cn.qdqn.demo.entity.Data" converter="bean" />
        <!-- 创建映射对象 -->
        <create creator="spring" javascript="DataFinder">
            <param name="beanName" value="DataFinder" />
        </create>
    </allow>
</dwr>

 

 

 

 

 

 

 

 

前端代码

 

 

<%@ page language="java" pageEncoding="UTF-8"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
    <html:base />

    <title>select.jsp</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
    <script type='text/javascript'
        src='/ssha_3_layer_menu_select/dwr/interface/DataFinder.js'></script>
    <script type='text/javascript'
        src='/ssha_3_layer_menu_select/dwr/engine.js'></script>

    <script type='text/javascript'
        src='/ssha_3_layer_menu_select/dwr/util.js'></script>
    <script type="text/javascript">
   
        var selectIds = ['pro','city','cou'];//三级级连 有几级就在这按顺序写好
       
       
        //把一个select控件初始化
        function resetSelect(ele){
            var sign = false;
            for(var i = 0; i<selectIds.length; i++){
                if(ele == selectIds[i]){
                    sign = true;
                    $(selectIds[i]).style.display='inline';
                    $(selectIds[i]).disabled=false;
                    continue;
                }
                if(sign){
                    $(selectIds[i]).style.display='none';
                }
            }
        }
       
        //找到级连的下一个元素
        function findNextId(ele){
            for(var i = 0; i<selectIds.length; i++){
                if(ele == selectIds[i]){
                    if (i<selectIds.length-1){
                        return selectIds[i+1];
                    }
                }
            }
            return null;
        }
       
        //生成数据
        function ajaxSelect(ele, data, value, label){
            resetSelect(ele);
            DWRUtil.removeAllOptions(ele);
            DWRUtil.addOptions(ele,[{value:0, label:'请选择...'}],'value','label');
            DWRUtil.addOptions(ele, data, value, label);
            DWRUtil.yellowFadeHighlightHandler(ele);//呵呵,让变动的控件变成黄色,很醒目!
            //DWRUtil.highlight(ele);
        }


        function load(){
            DataFinder.findAllTopList(function(msg){
                ajaxSelect('pro',msg,'leafid','leafname');
            });
        }
       
        function selectOnchange(){
            var e = window.event || arguments[0];
            var ele = e.srcElement || e.target;
            DataFinder.findById($(ele.id).value ,function(msg){
                if(msg){
                    var next = findNextId(ele.id);
                    if(next){
                        ajaxSelect(next,msg.datas,'leafid','leafname');
                    }
                }else{
                    resetSelect(ele.id);
                }
            });
        }
       
       
        function init(){
            document.getElementById('bt').onclick = load;
            for(var i = 0; i<selectIds.length; i++){
                document.getElementById(selectIds[i]).onchange = selectOnchange;
            }
        }
       
        window.onload = init;
    </script>
</head>


<body>

    <button id="bt">
        籍贯
    </button>
    <select id="pro" style="display: none;"></select>
    <select id="city" style="display: none;"></select>
    <select id="cou" style="display: none;"></select>
</body>
</html:html>

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值