ajax实现级联下拉菜单

ajax实现级联下拉菜单非常简单,下面是一个用ajax实现的省市级联的下拉菜单;

jsp中在<select>中添加onchange事件,触发该事件调用实现ajax的js:

<div>
	<form action="Pcs" method="post">
		所在省:<select name="pro" id="pro" onchange="chCity();">
				<option>--请选择--</option>
				<option value="beijing">北京市</option>
				<option value="shandong">山东省</option>
				<option value="hebei">河北省</option>
			 </select>      
		所在市:<select name="cit" id="cit">
				<option>--请选择--</option>
			 </select><br>

	</form>
</div>

正常的下拉菜单选项是在数据库取出来的,为了方便,我把省直接写在里面;所在市除了“选择”目前没有实际的option;

js中实现ajax:

function chCity(){
	var pro=document.all("pro").value;
	if(window.XmlHttpRequest){
		xmlHttpRequest=new XmlHttpRequest();
	}else{
		xmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP");
	}
	xmlHttpRequest.onreadystatechange=callBack;
	var url="Pcs";
	xmlHttpRequest.open("post",url,true);
	xmlHttpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");
	xmlHttpRequest.send("pro="+pro+"&timeStamp="+(new Date()).getTime());
}
//回调函数
function callBack(){

	if(xmlHttpRequest.readyState==4 && xmlHttpRequest.status==200){
		var result=xmlHttpRequest.responseText;
		result=result.replace(/(^\s*)|(\s*$)/g, "");
		var city=result.split("|");

		var citySelect=document.all("cit");

		for(var i=citySelect.options.length-1;i>=0;i--){

			citySelect.options.remove(i);
		}
		for(var i=0;i<city.length;i++){
			var vn=city[i].split(",");
			var cvalue=vn[0];
			var cname=vn[1];
			var opt=document.createElement("option");
			citySelect.options.add(opt);
			opt.value=cvalue;
			opt.innerHTML=cname;
		}
	}
}

说明:

document.all("pro").value,根据name或id取值,这里用来获取select选项的value值;

把选择的option的value通过ajax提交到后台,先不看回调函数;

后台java程序:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Pcs extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.equals("utf-8");
		response.setCharacterEncoding("utf-8");
		String pro=request.getParameter("pro");
		String cities="";
		if(pro.equalsIgnoreCase("beijing")){
			cities="haidian,海淀|changping,昌平|chaoyang,朝阳";
		}else if(pro.equalsIgnoreCase("shandong")){
			cities="jinan,济南|dezhou,德州|qingdao,青岛";
		}else if(pro.equalsIgnoreCase("hebei")){
			cities="shijiazhuang,石家庄|langfang,廊坊|xingtai,邢台";
		}else{
			cities=",--请选择--";
		}
		PrintWriter out=response.getWriter();
		out.print(cities);
		out.flush();
		out.close();

	}

}

说明:

正常的市是根据省在数据库查询出来的,为了方便我直接写在了字符串中;

在回调函数中我返回的是有一定格式的字符串,再在回调函数里用split分割;

注意最后一个else不能省掉,不然会在市里可能出现undefinded;

关于回调函数的说明:

var citySelect=document.all("cit");拿到市的select对象;

citySelect.options得到所有option对象,从后向前循环删掉option(因为这是我前一个选择出来的市,换了省市就得换);

var city=result.split("|");获取所有市(option的value,option的文本子节点),进行遍历;

var vn=city[i].split(",");

var cvalue=vn[0];

var cname=vn[1]; 获取option的value和文本节点

创建元素节点 option,并为select加子节点;

给option加value和文本节点;

时间: 2024-10-13 11:35:15

ajax实现级联下拉菜单的相关文章

级联下拉菜单

级联下拉菜单 需要引入jQuery 级联下拉菜单JS-casdrop.js: var div_cascade; //数据格式示例 /* [ {"id":1,"name":"数码","pid":0}, {"id":2,"name":"手机","pid":1}, {"id":3,"name":"笔记本&

收藏的js实现全国省份城市级联下拉菜单

在写程序的时候,经常需要用到全国省份城市级联下拉菜单的js代码. 这样的程序,没有必要完全自己去写,太费时间. 下面是我收藏的一个优质代码,非常不错,分享给大家. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http

在sharepoint 2010创建级联下拉菜单

SPServices是一个jQuery库,它提取SharePoint Web服务,并使其更容易使用.它可以使用不同的Web服务操作提供更有用且很酷的功能.它完全安装在客户端,不需要服务器. 用SPServices建立级联菜单十分简单,只需在同一个网站下建立一个级联关系库,再添加对应脚本即可. 我们要创建如下图级联下拉菜单 首先我们得建一个库,来确定两级菜单间的关系,像这样: 接着,如图所示在正式的库里创建Catalogue字段(一级菜单)和SubCatalogue字段(二级菜单)        

ajax三级联动下拉菜单

ajax写三级联动,先写一个文件类吧,以后用的时候直接调用即可: 来找一张表: 实现: 中国地域的三级联动:省.市.区: 图: 说一下思路: (1)当用户选择省份的时候触发事件,把当前的省份的id通过ajax发出请求传递到服务端的程序中 (2)比如取中国地域,中国是0001,那么自带号为0001的便是中国地域: 北京的代号为11,那么子代号为11的便是北京时的市区, 也就是说根据主代号查询子代号: (3)服务端根据客户端的请求,查询数据库,并按照一定的格式返回给客户端 显示页面非常简单,只需要一

yii实现级联下拉菜单的方法

1.模版中加入如下代码: ? 1 2 3 4 5 6 7 8 <?php  echo $form->dropDownList($model, 'src_type_id', OrderSrc::options(), array(  <span style="white-space:pre"> </span>'id' => 'task-order-src-id',  ));  echo $form->dropDownList($model,

[ PHP+jQuery ] ajax 多级联动菜单的应用:电商网站的用户地址选择功能 ( 一 ) - 传统下拉菜单

/** jQuery version: 1.8.3 Author: 小dee Date: 2014.11.5 */ 说明:分析其他网站的图片较多,可以在目录跳过直接看本文 demo . 目录: 其他网站分析 亚马逊 淘宝 京东 当当 本文案例 demo1 demo2 [ 后面的博文再写 ] demo3 [ 后面的博文再写 ] 惯例,先看看他山之石,选择了四家比较大的电商网站:亚马逊.淘宝.京东.当当,看看它们的地址联动菜单是怎么做的. 1. 亚马逊[返回目录][下一节:淘宝] 图1 默认界面 说

在AJAX里 使用【 XML 】 返回数据类型 实现简单的下拉菜单数据

在AJAX里 使用XML返回数据类型 实现简单的下拉菜单数据 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <

在AJAX里 使用【 JSON 】 返回数据类型 实现简单的下拉菜单数据

在AJAX里 使用JSON返回数据类型 实现简单的下拉菜单数据 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> &l

ajax实现三级联动下拉菜单

先不要着急去实现功能,我们第一步首先要理清思路,想要实现三级联动,首先要有三个下拉框,然后点击第一个下拉菜单,可以联动到第二个,点击第二个联动到第三个,实现省市区的三级联动,用到的数据表如下: 为了以后可以随时拿出来用,我们先在主页面建立一个div叫sanji,然后用一个js页面来引用: 主页面引入Jquery和js: <title>无标题文档</title> <script src="jquery-3.2.0.min.js"></script