使用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();

             

              //通过javaScriptImage对象预装载显示图片

              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包中的代码省略

  */

 

 

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值