`
iehyou
  • 浏览: 135458 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

原生AJAX 实现级联select

    博客分类:
  • web
阅读更多
由于是在客户上的框架上做开发,因为是比较老的框架,ajax框架也是没有的,只有自己手写了.现在写起来还有点问题的.
主要还是封装获取XMLHttpRequest对象,应用的时候直接调用就可以了.
//实现ajax
var http_request = false;
function send_request(url,poststr,processRequest) {//初始化、指定处理函数、发送请求的函数
	  http_request = false;
	  //开始初始化XMLHttpRequest对象
	  if(window.XMLHttpRequest) { //Mozilla 浏览器
	   http_request = new XMLHttpRequest();
	   if (http_request.overrideMimeType) {//设置MiME类别
	    http_request.overrideMimeType('text/xml');
	   }
	  }
	  else if (window.ActiveXObject) { // IE浏览器
	   try {
	    http_request = new ActiveXObject("Msxml2.XMLHTTP");
	   } catch (e) {
	    try {
	     http_request = new ActiveXObject("Microsoft.XMLHTTP");
	    } catch (e) {}
	   }
	  }
	  if (!http_request) { // 异常,创建对象实例失败
	   window.alert("不能创建XMLHttpRequest对象实例.");
	   return false;
	  }
	  http_request.onreadystatechange = processRequest;
	  // 确定发送请求的方式和URL以及是否同步执行下段代码
	  http_request.open("POST", url, false);
	  http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	  http_request.send(poststr);
}



下面是父select和子select的代码
<select name="channelId" onchange="getSections(this,'sectionId');">
	<option value="" >无</option>
	<c:if test="${channels!=null}" >
	<c:forEach items='${channels}' var='cc'>
	<option value="<bean:write name="cc" property="channelId" />" ><c:out value='${cc.channelName}' escapeXml="false"/>
</option>
	</c:forEach>
	</c:if>
</select>
<select name="sectionId" id="sectionId">
     <option value="" >无</option>
</select>



父select 改变时执行的JS:
  
//获取频道下的栏目
function getSections(o,s){
 	var sectionId=document.getElementById(s);
	 if(o.value!=''){
		send_request('<%=request.getContextPath()%>/itv/voteAction.do?act=getSectionsBychannelId','channelId='+o.value,setSections);
	 }else{
	 	sectionId.options.length = 0;
	 	var varItem = new Option('无', '');  
	 	sectionId.options.add(varItem);     
	 }
 } 


后台代码:
public ActionForward getSectionsBychannelId(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws IOException {
		log.debug("channelId获取sections");
		VoteForm voteForm = (VoteForm) form;
		response.setContentType("text/html;charset=UTF-8");    
        String channelId = request.getParameter("channelId"); //获取参数中的值
        sectionManager = (SectionManagerImpl) SpringWebUtils.getApplicationContext(request).getBean("sectionManager");
        List sections=sectionManager.getSectionsBychannelId(Long.valueOf(channelId));
        //组装栏目选项 
        StringBuffer results = new StringBuffer("<sections>");    
        for (int i = 0; i < sections.size(); i++) {
			Section s=(Section)sections.get(i);
			results.append("<section");  
			results.append(" id=\""+s.getSectionId()+"\"");
			results.append(" sectionName=\""+s.getSectionName()+"\"");
			results.append(" />");  
		}
        results.append("</sections>");
        response.setContentType("text/xml;");    
        PrintWriter pw = response.getWriter();      
        pw.print(results.toString());    
        pw.flush();    
        pw.close();    
		return null;
	}


将栏目列表防止到子select里面:
function setSections(data){
 	var sectionId=document.getElementById('sectionId');
 	sectionId.options.length = 0;
	 if (http_request.readyState == 4) { // 判断对象状态
	    if (http_request.status == 200) { // 信息已经成功返回,开始处理信息
	       var sections=http_request.responseXML.getElementsByTagName('section');
	       if(sections.length!=0){
		       for(var j=0;j<sections.length;j++){
		       	  var option=new Option(sections[j].getAttribute('sectionName'),sections[j].getAttribute('id'));
		       	  sectionId.options.add(option);
		     	}
	     	}
	     	else{
	     		var varItem = new Option('无', '');  
	 			sectionId.options.add(varItem);
	     	}
	    } else { //页面不正常
	       alert("您所请求的页面有异常。");
	    }
	 }
}
分享到:
评论

相关推荐

    利用Ajax技术实现级联式组合框.pdf

    总的来说,利用Ajax技术实现级联式组合框是提升Web应用交互性的一个有效方法。通过异步加载和更新数据,不仅减少了用户等待时间,还优化了资源使用,使得复杂的交互操作变得更加流畅。在实际开发中,开发者还需要...

    JSP+AJAX三级级联及更多级的实现

    ### JSP+AJAX三级级联及更多级的实现 #### 概述 在Web开发中,级联选择框是一种常见的交互方式,尤其在需要多级数据关联展示时(如省份-城市-区县的选择)。本文将详细介绍如何利用Java Server Pages (JSP) 和 ...

    级联下拉demo

    这个“级联下拉demo”显然是一个示例项目,旨在演示如何实现这种功能。让我们深入探讨级联下拉的相关知识点。 级联下拉通常由两个或更多的下拉菜单组成,其中第二个(或更多)的选项取决于第一个的选择。这种交互...

    JS完整城市三级级联

    在本项目“JS完整城市三级级联”中,我们关注的是一个实现到县级单位的城市选择器,这样的功能常见于地址输入、物流配送等应用场景。这个级联选择器通常包括省、市、县三个级别,用户逐级选择,最终得到精确的地理...

    JQUREY实现自定义的下拉列表

    在网页设计中,下拉列表(Dropdown List)通常由HTML的`...需要注意的是,虽然jQuery提供了很多便利,但为了性能和现代Web开发趋势,也可以考虑使用原生JavaScript或者React、Vue等现代前端框架来实现类似的功能。

    仿人人注册高校/大学级联选择JS代码

    【标题】"仿人人注册高校/大学级联选择JS代码"是针对网页中实现高校或大学级联选择功能的一种JavaScript实现。在网页表单中,级联选择通常用于让用户逐级选择,例如先选择省份,然后根据省份选择城市,再根据城市...

    jsp出生日期三级级联下拉列表

    在本文中,我们将深入探讨如何在JSP(JavaServer Pages)中实现一个基于JavaScript的出生日期三级级联下拉列表。这种功能常用于用户注册、个人信息填写等场景,让用户能够方便地选择他们的出生年、月和日。 首先,...

    bootstrap-select-1.13.0-dev.rar

    10. **插件集成**:除了基本功能外,Bootstrap Select还可以与其他jQuery插件或库(如Ajax、Typeahead等)结合使用,实现更复杂的动态加载或搜索过滤等功能。 综上所述,"bootstrap-select-1.13.0-dev.rar"包含了...

    java select

    综上所述,Java Select与两级级联下拉菜单的实现涉及到了Java后端处理、Ajax前端交互以及JSP页面集成等多个方面的知识,是Web开发中常见的需求场景。通过理解上述知识点,开发者可以更好地掌握如何在实际项目中实现...

    JQuery可编辑表格、横向纵向菜单、标签页、级联下拉框、窗口

    jQuery的Chosen、Select2等插件可以方便地将原生HTML select元素转化为美观且易用的下拉框,并支持级联效果。只需为select元素添加特定类名,然后初始化插件,即可实现联动选择,同时提供搜索过滤功能,提升用户输入...

    Ajax获取多级联列表信息先择

    - 事件监听:监听用户在级联列表中的选择,触发新的Ajax请求以获取下一级别列表。 3. **SQL Server 2005**:作为数据库系统,其角色是存储和管理城市数据。可能涉及的SQL操作: - SELECT语句:用于查询特定级别的...

    jQuery多级联动美化版Select下拉框插件.zip

    这种联动效果可以递归地应用于多个级别的下拉框,从而实现深度级联。 2. **动态加载**:在大型数据集的情况下,插件支持按需加载下拉框的选项,避免一次性加载大量数据导致页面响应变慢。 3. **美化设计**:插件...

    FillOptions CascadingSelect

    "select插件"可能是指专门用来增强原生HTML `&lt;select&gt;` 元素功能的工具,它们通常提供更丰富的样式、交互和功能,比如Bootstrap的Selectpicker或者Chosen等。这些插件通常具有良好的自定义性,支持异步加载和级联...

    jQuery省市区三级联动插件

    4. **自定义样式**:为了符合网站设计风格,可以自定义下拉框的样式,或者使用其他UI组件替换原生的`&lt;select&gt;`元素。 5. **无障碍访问**:确保插件对屏幕阅读器和其他辅助技术友好,提供良好的无障碍体验。 总结,...

    HTML移动端省市区三级联动,完美适配Android和IOS

    然而,根据描述,这个插件是纯原生JS实现的,所以开发者需要自行处理这些兼容性问题。 在CSS方面,我们需要为这些下拉列表提供合适的样式,确保在不同设备上显示正常。考虑到移动设备的屏幕大小,可能需要将下拉...

    dropdownlist&xml二级联动

    - **AJAX技术**:通过使用Ajax技术可以实现在不刷新整个页面的情况下动态加载XML数据,提高用户体验。 - **XML解析**:除了使用原生JavaScript的DOM解析外,还可以考虑使用第三方库如jQuery来简化XML数据的处理过程...

    jquery插件表

    - **jQuery controlled dependent (or Cascading) Select List**:创建级联选择框,实现数据联动。 - **Multiple Selects**:支持多选功能的下拉列表。 - **Select box manipulation**:对选择框进行各种操作,如...

    海量经典的jQuery插件集合

    - **功能概述**:实现级联选择功能。 - **应用场景**:例如省份城市选择等场景。 **3. Multiple Selects** - **功能概述**:支持多选功能的下拉列表。 - **应用场景**:适用于需要多选功能的表单。 **4. Select ...

    jQuery插件教程(搜罗了全部插件).docx

    - jQuery controlled dependent (or Cascading) Select List:创建级联下拉列表。 - Multiple Selects:支持多选的下拉框。 - Select box manipulation:提供对选择框的各种操作方法。 - jQuery - LinkedSelect...

    HTML搜索框模糊匹配下拉显示

    - **Datalist标签**是一种简单且原生的实现方式,但在浏览器兼容性和功能方面有一定的局限性。 - **jQuery Autocomplete插件**提供了更强大的功能和更好的兼容性,适合于更复杂的场景。 - 在实际开发中,可以根据...

Global site tag (gtag.js) - Google Analytics