`
younglibin
  • 浏览: 1193960 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ajax和js实现下拉列表级联的两种方式(ajax和dwr)

阅读更多

今天遇到一个问题:

有三个下拉列表,分别是:消息大类,消息中类,消息小类;要用级联的方式展现:如图:



 当选择 消息大类 时 ,刷出消息中类,内容只包含 大类选择条件下的类型!同理  选择中类 刷出小类!

(注意这里的下拉列表的值 是从数据库中查出来的,不是写死在html;

从数据库中查出来的数据,特别是中类和大类难免有些重复现象,怎么取出重复呢?看这里(使用map转换整理中)

下面用两种方法来介绍 下拉列表级联:

1.dwr方式:
具体的dwr配置请看:

下面只介绍级联用到的js:

 

 

function getChild(pareantType,childType){
		if(pareantType==null||pareantType.length<1)
			 // parentType:当前下拉列表的参数(可更具自己的查询条件,传值【可以是选中的code,或type....】) 
			 //childType:要刷出子列表的 参数(同上) 
	    {
	        return;
	    }    
	    try
	    {  
		    var id = document.getElementById(pareantType).value;
	    	MsgTypeService.getMsgType(id,childType,function(data)
	    			 // id : 查询使用到的条件,更具自己的Service用的参数,可以传零到多个 
	    			 // data: service放回的list 也就是子列表中显示的数据了
	    	{		
	    		if(data!=null)
	    		{		var oBtsTypeNumber=document.all(childType);
	    				while( oBtsTypeNumber.childNodes.length>0) {  
   								oBtsTypeNumber.removeChild(oBtsTypeNumber.childNodes(0));
   							}
   						var op= document.createElement("Option")
   						op.value="";
	    				op.text="--全部--";
	    				oBtsTypeNumber.add(op);
	    				//这里是将 子列表中数据清空
					for(i=0;i<data.length;i++)
					{
				    		var no=document.createElement("Option");
				    		 //为子列表添加数据,遍历 
				        	no.value= data[i].code;   
				          	no.text = data[i].midType; 

				          	//注意这里的 code 和midType这两个值,是 ,返回 list 的泛型(的两个字段),并且,在配置dwr.xml时要注意,和泛型相一致,否则会出现,code或midType为空或不是对象的错误警告! 
				          	oBtsTypeNumber.add(no);  
				            if("${pareantType}"==data[i].midType){
				           		no.selected="true";  	
				         	 } 	
  					 	}
	    		}
	    	});
	    }
	    catch(e)
	    {}
	}

 

 

 

,解释一下:返回list的泛型:

dwr.xml:

 

<convert converter="bean" match="com.iman.nrms.nrmwns.prm.message.domain.model.MsgType"/>	

		//  com.iman.nrms.nrmwns.prm.message.domain.model.MsgType  dwr 调用返回list 的泛型
		<create creator="spring" javascript="MsgTypeService">
            <param name="beanName" value="msgTypeService"/>
			<include method="getMsgType"/>
			<include method="getMsgMidType"/>  
			
		</create>

		在哦jsp页面代码中 用到的 code 和midType 都是 MsgType 这个po中的属性!,根据自己的需要!再在这里配置!

 

 下面就是掉 dwr的方法了:

<td width="4%" rowspan="3"><img src="${path}/page/wrm/image/search.gif" width="40" height="39"></td>
       <td nowrap="nowrap">消息大类</td>
	        
	   <td>
	    
	   <s:select list="msgBigTypeList"  name="msgType.bigType" onchange="getMidType('bigType','midType');"
	   				  id="bigType" cssClass="select" headerKey="" headerValue="--请选择--" listKey="code" listValue="bigType"></s:select>
	   
	   </td>
	   <td nowrap="nowrap">消息中类</td>
	        
	   <td>
	    
	   <s:select list="msgMidTypeList" name="msgType.midType"  onchange="getSmlType('midType','smlType');"
	   				  id="midType" cssClass="select" headerKey="" headerValue="--请选择--" listKey="code" listValue="midType"></s:select>
	   

  

方法2:(推荐使用方法)

 

这个方法首先要为每一个 </td>下拉列表写一个 function();

 

这里用到了三个下拉列表,级联了两次,就要写两个:

  

/**

 大类与中类级联
 */
    function getMidType(parentValue,childName){

    	var url= "${path}/message/getMidTypeByBigType.action";
    	var propertyName = "midType";
    	fnGetChildValueList(parentValue , childName , url , propertyName );
    }
    /**
    中类与小类级联
    */
    function getSmlType(parentValue , childName )
    {
    	
    	var url= "${path}/message/getSmlTypeByMidType.action";
    	var propertyName = "smlType";
    	fnGetChildValueList(parentValue , childName , url , propertyName);
    	
    }


    /**
     * 下拉框级联
     * @param {Object} parentValue
     * @param {Object} child 必须在当前页面的第一个Form表单中的name属性或者下拉框对象的id
     * @param {Object} url
     * @param {Object} propertyName
     * @param {String} callBack //结束后,要调用的函数名
     */
    function fnGetChildValueList(parentValue , child , url , propertyName )
    {
    	if(!parentValue||!child)
    	{
    		return;
    	}

    	var oChild = document.forms[0][child];
    	if(typeof oChild != 'undefined')
    	{
    		try{
    			oChild = $(child);
    		}catch(e){return;}
    		
    		if(!oChild){
    			return;
    		}
    	}
        var ops=oChild.options;
        while(ops.length>0){
            oChild.remove(ops.length-1);
        }
    	var oOption = document.createElement("OPTION");
    	oOption.setAttribute("text","请选择");
    	oOption.setAttribute("value","");
    	oChild.add(oOption);
    	ajax.sendPostRequest(url , propertyName + "=" + encodeURI(encodeURI(parentValue)) ,function(result){

    		eval("var keyValueList="+result.responseText);
    		for(var i=0; i<keyValueList.length; i++)
    		{
    			var keyValue=keyValueList[i];
    			var oOption = document.createElement("OPTION");
    			oOption.setAttribute("text",keyValue.value);
    			oOption.setAttribute("value",keyValue.key);
    			oChild.add(oOption);
    			
    		}
    	});
    }

 

注意这里用到的:keyValueList

要在Action中包装:

 

 

public String getMidTypeByBigType(){
		
		try {
			msgMidTypeList = this.msgTypeService.getMidTypeByBigType(java.net.URLDecoder.decode(midType, "UTF-8"));
			List<KeyValue> keyValueList = new ArrayList<KeyValue>();
			if (msgMidTypeList != null) {
				for (MsgType c : msgMidTypeList) {					
						keyValueList.add(new KeyValue(c.getCode(), c.getMidType()));
				}
			}
//			向客户端直接输出文本数据
			renderText(keyValueList.toString());
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return null;
	}

 

 

 

 

  • 大小: 3.3 KB
2
0
分享到:
评论
1 楼 陈君宁 2012-05-17  
学到很多 感谢分享

相关推荐

    AJAX-DWR下拉框级联

    AJAX-DWR下拉框级联AJAX-DWR下拉框级联 真正实用的`仅供参考

    Ajax级联菜单,通过dwr框架实现省份城市级联效果

    这是一个级联菜单,使用ajax技术,采用了dwr框架,选择省份,城市自动加载,以此类推,可以实现多种级联效果

    Ajax的dwr框架实现级联

    Ajax的dwr框架实现级联源码,大家有用到的可以看一下

    DWR级联菜单下拉框

    刚学dwr 自己写的三级联动下拉框 DWR版本 3.0 数据库 Ms SQL 2005 环境 Myeclipse 8.x 有问题联系 :Mr .陈 MSN czw30110@hotmail.com

    DWR AJAX 简单示例

    DWR AJAX 级联下拉菜单,动态调用远程方法

    北京中科信软AJAX培训

    实战技巧:级联下拉列表 使用responseXML处理返回的XML信息 实战技巧:获取元对象数据 实战技巧:处理列表数据 实战技巧:处理级联的数据 实战技巧:保存更新数据 在普通文本和XML文档之间权衡 何时返回普通文本 ...

    DWR 联动下拉菜单基本应用

    用DWR实现AJAX的联动下拉列表,是DWR的基本操作,版本为DWR2

    ajax的dwr框架简单示例视频

    现在流行的ajax视频教程,几个示例包括用户名验证,级联菜单,dwr框架的应用~是exe格式的

    dwr资源的jar包

    dwr是一组可复用并且结合得很好的Java/JavaScript包.它通过AJAX来轻松转变你web应用程序的交互方式.它带的一些组件包括可以自动补全的文本框架,动态级联下拉列表,动态表单等

    struts2+dwr 整合实例

    下载放到Myeclips里就可以运行、里面包含struts2环境搭建(点击按钮)、struts2+dwr整合(在文本框中输入值后会访问后台,给select动态增加option赋值、点击按钮又会显示会select被选中的option的value和text值)、...

    Dwr的配置,练习如何使用dwr

    里面主要涉及到: 1,dwr的配置; 2,用户名唯一性检测; 3,回调函数怎样的到实体Bean,js分页; 4,select实现级联。 更多功能在里面。。。。。

    struts2+dwr整合实例

    struts2+dwr整合实例,在文本框中输入值。会到后台查询,给select标签赋值,要是想实现级联下拉框,我想你看完应该能做出来。

    DWRselect(附Ant).rar

    用DWR实现的一个AJAX级联下拉框,数据从XML文件读取

    纯JSP+DWR实现三级联动下拉选择菜单实现技巧

    这个Ajax联动殊不知和这些框架有什么关系,一个小Demo干嘛整得那么大。 今天我做了一个dwr+jsp做的例子。 web.xml: 代码如下: &lt;?xml version=”1.0″ encoding=”UTF-8″?&gt; &lt;web-app version=”2.4″ xmlns...

    个人信息管理系统Struts2 spring hibernate dwr

    在Ajax更新复习次数时通常都会第一次失败,再点一次就能成功了,第一次失败是因为Request 取到了NULL值,因为对三大框架无缝组合还不太熟悉,如果你知识别忘了告诉我哦(yukiceo@126.com) 由于对页面样式了解不多...

    选择国家下拉选,在省份下拉选中填充所有这个国家的省,再选择省,在城市下拉选中填充所有该国家,该省的所有城市的三级联

    用dwr ajax技术,数据库为oracle,三个表,国家,省,城市,

    低清版 大型门户网站是这样炼成的.pdf

    3.7.2 基于dwr的ajax实现 179 3.7.3 基于dwr的ajax表单验证 183 3.7.4 基于json插件的ajax实现 185 3.8 小结 190 第4章 orm中间件名流hibernate 3接管持久层 191 4.1 orm简介 191 4.1.1 持久化与持久层 191 ...

    Ext 开发指南 学习资料

    9.7. 下拉列表选择每页显示多少数据 10. 撕裂吧!邪魔外道与边缘学科。 10.1. dwr与ext整合 10.1.1. 无侵入式整合dwr和ext 10.1.2. DWRProxy 10.1.3. DWRTreeLoader 10.1.4. DWRProxy和ComboBox 10.2. localXHR让你...

    EXT教程EXT用大量的实例演示Ext实例

    9.7. 下拉列表选择每页显示多少数据 10. 撕裂吧!邪魔外道与边缘学科。 10.1. dwr与ext整合 10.1.1. 无侵入式整合dwr和ext 10.1.2. DWRProxy 10.1.3. DWRTreeLoader 10.2. localXHR让你在不用服务器就玩ajax ...

    EXT2.0中文教程

    9.7. 下拉列表选择每页显示多少数据 10. 撕裂吧!邪魔外道与边缘学科。 10.1. dwr与ext整合 10.1.1. 无侵入式整合dwr和ext 10.1.2. DWRProxy 10.1.3. DWRTreeLoader 10.2. localXHR让你在不用服务器就玩ajax 10.3....

Global site tag (gtag.js) - Google Analytics