jQuery+jsp实现省市县三级联动效果(附源码)

前端技术 2023/09/01 JavaScript

本文实例讲述了jQuery+jsp实现省市县三级联动效果的方法。分享给大家供大家参考,具体如下:

在这里,用MySQL数据库存储了全国所有的省市县地区信息(点击此处下载源代码)

使用过的jar包

google的Gson.jar
mysql-connector-java-5.1.13-bin.jar

将实验图贴出来:

显示页面index.jsp

<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"UTF-8\"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+\"://\"+request.getServerName()+\":\"+request.getServerPort()+path+\"/\";
%>
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<html>
 <head>
 <base href=\"<%=basePath%>\"> 
 <title>省市区三级联动下拉菜单</title>
 <script type=\"text/javascript\" src=\"<%=path %>/js/jquery/jquery-1.7.min.js\"></script>
 <script type=\"text/javascript\" src=\"<%=path %>/js/json/json-minified.js\"></script>
 </head>
 <body>
 <table>
 <tr>
 <td>
 省份:
 <select name=\"province\" id=\"province\" onchange=\"onSelectChange(this,\'city\');\"></select>
 城市:
 <select name=\"city\" id=\"city\" onchange=\"onSelectChange(this,\'district\');\">
  <option value=\"\">请选择</option>
 </select>
 区(县):
 <select name=\"district\" id=\"district\">
  <option value=\"\">请选择</option>
 </select>
 </td>
 </tr>
 </table>
 </body>
</html>
<script type=\"text/javascript\">
function onSelectChange(obj,toSelId){
 setSelect(obj.value,toSelId);
}
function setSelect(fromSelVal,toSelId){
 //alert(document.getElementById(\"province\").selectedIndex);
 document.getElementById(toSelId).innerHTML=\"\";
 jQuery.ajax({
  url: \"<%=path%>/getDropdownDataServlet\",
  cache: false,
  data:\"parentId=\"+fromSelVal,
  success: function(data){
  createSelectObj(data,toSelId);
  }
 });
}
function createSelectObj(data,toSelId){
 var arr = jsonParse(data);
 if(arr != null && arr.length>0){
  var obj = document.getElementById(toSelId);
  obj.innerHTML=\"\";
  var nullOp = document.createElement(\"option\");
  nullOp.setAttribute(\"value\",\"\");
  nullOp.appendChild(document.createTextNode(\"请选择\"));
  obj.appendChild(nullOp);
  for(var o in arr){
   var op = document.createElement(\"option\");
   op.setAttribute(\"value\",arr[o].id);
   //op.text=arr[o].name;//这一句在ie下不起作用,用下面这一句或者innerHTML
   op.appendChild(document.createTextNode(arr[o].name));
   obj.appendChild(op);
  }
 }
}
setSelect(\'1\',\'province\');
</script>

数据库交互GetDropdownDataServlet

public class GetDropdownDataServlet extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws IOException, ServletException {
  doPost(request, response);
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws IOException, ServletException {
  String parentId = request.getParameter(\"parentId\");
  if (parentId == null || parentId == \"\") {
   parentId = \"0\";
  }
  Connection conn = null;
  String json = \"\";
  try {
   Class.forName(\"com.mysql.jdbc.Driver\");
   conn = DriverManager.getConnection(\"jdbc:mysql://localhost/dropdown\",
     \"root\", \"root\");
   Statement stat = conn.createStatement();
   ResultSet rs = stat
     .executeQuery(\"select region_id,region_name from region where parent_id = \"
       + parentId);
   ArrayList rsList = new ArrayList();
   Map map = null;
   while (rs.next()) {
    map = new HashMap();
    map.put(\"id\", rs.getInt(1));
    map.put(\"name\", rs.getString(2));
    rsList.add(map);
   }
   rs = null;
   Gson gson = new Gson();
   json = gson.toJson(rsList);
   System.out.println(\"json=\" + json);
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException e) {
   e.printStackTrace();
  } finally {
   if (conn != null) {
    try {
     conn.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
  }
  response.setCharacterEncoding(\"UTF-8\");
  response.getWriter().print(json);
 }
}

希望本文所述对大家jQuery程序设计有所帮助。

本文地址:https://www.stayed.cn/item/2043

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。