使用JQuery实现漂亮的三级级联下拉框

使用JQuery实现漂亮的三级级联下拉框

/**

* 使用标题可下载本Demo

* 需要使用json.jar包

* 使用JQuery实现漂亮的三级级联下拉框

*/

//-----------------------------------------------jsp-----------------------------------------------

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme() + "://"

+ request.getServerName() + ":" + request.getServerPort()

+ path + "/";

%>

<html>

<head>

<title>下拉级联菜单</title>

<link rel="stylesheet" type="text/css" href="css/chainSelect.css">

<script language="javascript" src="js/jquery-1.3.2.js"></script>

<script language="javascript" src="js/chainSelect.js"></script>

</head>

<body>

<div class="loading">

<p>

<img src="images/data-loading.gif" alt="" />

</p>

<p>

数据加载中……

</p>

</div>

<div class="car">

<span class="carname"> 汽车厂商 <select>

<option value="" selected="selected">

请选择汽车厂商

</option>

<c:forEach items="${CARLIST}" var="car">

<option value="${car.carId}">

${car.carName}

</option>

</c:forEach>

</select> </span>

<span class="cartype"> <img src="images/pfeil.gif" alt="" />

汽车类型: <select></select> </span>

<span class="wheeltype"> <img src="images/pfeil.gif" alt="" />

轮胎类型: <select></select> </span>

</div>

<div class="carimage">

<p>

<img src="images/img-loading.gif" alt="imaloading"

class="carloading" />

</p>

<p>

<img src="" alt="汽车图片" class="carimg" />

</p>

</div>

</body>

</html>

//-----------------------------------------------css-----------------------------------------------

.loading{

margin:0 auto;

visibility:hidden;

}

.loading p {

text-align: center;

}

p{

margin: 0;

}

.car,.carimage{

text-align: center;

}

.cartype,.wheeltype,.carloading,.carimg

{

display: none;

}

//------------------------------------------------js-----------------------------------------------

$(document).ready(function(){

//找到三个下拉框

var carnameSelect = $(".carname").children("select");

var cartypeSelect = $(".cartype").children("select");

var wheelSelect = $(".wheeltype").children("select");

//获取要显示的汽车图片

var carimg = $(".carimg");

//给三个下拉框注册事件

/**

* 第一个下拉框change事件

*/

carnameSelect.change(function(){

//只要第一个下拉框有变化则隐藏第三个下拉框

wheelSelect.parent().hide();

//隐藏汽车图片 attr:先清空上次src图片路径避免下一次先显示一次

carimg.hide().attr("src","");

//1、找到下拉框的值

var carnameValue = $(this).val();

//2、如果下拉框所选值不为空,则将该值传送给服务器

if(carnameValue != "")

{

/**

* 如果缓存为空 则请求服务器端数据

*/

if(!carnameSelect.data(carnameValue))

{

$.post("FindCarTypeByCarId",{keyword:carnameValue,type:"top"},function(data){

//接收服务器返回汽车类型---

// 如果返回的数据不为空

if(data.length !=0)

{

//解析返回的汽车类型数据,并填充到汽车类型的下拉框中

//先清空上次请求数据

cartypeSelect.html("");

$("<option value=''>" + "请选择汽车类型"+ "</option>").appendTo(cartypeSelect);

for(var i = 0;i<data.length;i++)

{

$("<option value='" + data[i].carTypeId + "'>" + data[i].carTypeName + "</option>").appendTo(cartypeSelect);

}

//让第二个下拉框显示

cartypeSelect.parent().show();

//让第一个后面的指示图片显示出来

carnameSelect.next().hide();

}

else

{

alert(carnameValue+"为空");

}

/*

* 将从服务器中获取的数据缓存起来

* data("缓存名称","缓存的对象")

*/

carnameSelect.data(carnameValue,data);

//alert("缓存了数据……");

},"json");

}

else

{

//---获取缓存中的数据

var data = carnameSelect.data(carnameValue);

if(data.length !=0)

{

cartypeSelect.html("");

$("<option value=''>" + "请选择汽车类型"+ "</option>").appendTo(cartypeSelect);

for(var i = 0;i<data.length;i++)

{

$("<option value='" + data[i].carTypeId + "'>" + data[i].carTypeName + "</option>").appendTo(cartypeSelect);

}

//让第二个下拉框显示

cartypeSelect.parent().show();

//让第一个后面的指示图片显示出来

carnameSelect.next().hide();

}

else

{

alert(carnameValue+"为空");

}

}

}else

{

//如果下拉框所选的值为空,则要隐藏第二个下拉框的span要隐藏以来,

cartypeSelect.parent().hide();

//第一个下拉框后面指示的图片也要隐藏起来

cartypeSelect.next().hide();

}

})

/**

* 第二个下拉框change事件

*/

cartypeSelect.change(function() {

//隐藏汽车图片 attr:先清空上次src图片路径避免下一次先显示一次

carimg.hide().attr("src","");

var cartypeValue = $(this).val();

if(cartypeValue != "")

{

//如果没有缓存

if(!cartypeSelect.data(cartypeValue))

{

$.post("findWheelTypeByCarTypeId",{keyword:cartypeValue,type:"sub"},function(data){

if(data.length !=0)

{

wheelSelect.html("");

$("<option value=''>" + "请选择车轮类型"+ "</option>").appendTo(wheelSelect);

for(var i = 0;i<data.length;i++)

{

$("<option value='" + data[i].wheelTypeId + "'>" + data[i].wheelTypeName + "</option>").appendTo(wheelSelect);

}

wheelSelect.parent().show();

wheelSelect.next().hide();

}

else

{

alert(carnameValue+"为空");

}

/**

* 缓存数据

*/

cartypeSelect.data(cartypeValue,data);

//alert("缓存了数据……");

},"json");

}else

{

//获取缓存数据

var data = cartypeSelect.data(cartypeValue);

if(data.length !=0)

{

//alert("得到了缓存数据……");

wheelSelect.html("");

$("<option value=''>" + "请选择车轮类型"+ "</option>").appendTo(wheelSelect);

for(var i = 0;i<data.length;i++)

{

$("<option value='" + data[i].wheelTypeId + "'>" + data[i].wheelTypeName + "</option>").appendTo(wheelSelect);

}

wheelSelect.parent().show();

wheelSelect.next().hide();

}

else

{

alert(carnameValue+"为空");

}

}

}else

{

wheelSelect.parent().hide();

wheelSelect.next().hide();

}

})

/**

* 第三个下拉框事件

*/

wheelSelect.change(function(){

//获取三个下拉框中的值,便于拼接图片名称

var carname = carnameSelect.val();

var cartypename = cartypeSelect.val();

var wheelname = $(this).val();

//拼接图片名称

var carimageSrc = "images/"+ carname +"_"+ cartypename +"_"+ wheelname + ".jpg";

//先隐藏上次装载的图片

carimg.hide();

//显示loading图片

$(".carloading").show();

//通过javaScript的Image对象预装载显示图片

var carimage = new Image();

$(carimage).attr("src",carimageSrc).load(function(){

//-------------加载完成后执行的

//隐藏loading图片

$(".carloading").hide();

//显示汽车图片

//carimg.attr("src",carimageSrc).show();

//实现淡出动画效果

carimg.attr("src",carimageSrc);

carimg.animate({

left: 50, opacity: 'show'

}, { duration: 900 });

});

})

//给数据装载中的节点定义ajax事件,实现动画提示效果

$(".loading").ajaxStart(function(){

$(this).css("visibility","visible");

//animate:用于创建自定义动画的函数。

//opacity:0看不见 1:看得见

$(this).animate({

opacity:1

},0)

}).ajaxStop(function(){

$(this).animate({

opacity:0

},500); //500毫秒逐渐淡出

});

})

//-----------------------------------------------服务器端java代码----------------------------------

/**

*查找所有汽车厂商

*/

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

CarDAO carDAO = new CarDAOImpl();

List carList = carDAO.findCarAll();

System.out.println("汽车厂商总数:"+carList.size());

//保存显示集合

request.setAttribute("CARLIST", carList);

request.getRequestDispatcher("chainSelect.jsp").forward(request,

response);

}

/**

*查找所有汽车类型

*/

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

PrintWriter out = response.getWriter();

//获取第一个下拉框中的值 通过keyword获取

String firstValue = request.getParameter("keyword");

String top = request.getParameter("top");

int carId = Integer.parseInt(URLDecoder.decode(firstValue, "GBK"));

CarTypeDAO carTypeDAO = new CarTypeDAOImpl();

List carTypeList = carTypeDAO.findCarTypeByCarId(carId);

转换为js数据对象

JSONArray json = JSONArray.fromObject(carTypeList);

out.print(json.toString());

}

/**

*查找所有轮胎类型

*/

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

PrintWriter out = response.getWriter();

// 获取第二个下拉框中的值

String secondValue = request.getParameter("keyword");

int carTypeId = Integer.parseInt(URLDecoder.decode(secondValue, "GBK"));

WheelTypeDAO wheelTypeDAO = new WheelTypeDAOImpl();

//调用业务方法

List wheelList = wheelTypeDAO.findWheelTypeByCarTypeId(carTypeId);

//转换为js数据对象

JSONArray json = JSONArray.fromObject(wheelList);

out.print(json.toString());

}

/**

*dto 及 dao包中的代码省略

*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值