当前位置: 首页>编程语言>正文

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

https://www.xamrdz.com/lan/52e1963186.html

相关文章: