- 浏览: 31028 次
- 性别:
- 来自: 沈阳
文章分类
最新评论
数据库部分:
drop database if exists mydb; create database mydb character set gbk; --多级联动菜单 use mydb; drop table if exists select_menu; create table select_menu( id varchar(255) not null default '', text varchar(255) not null, pid varchar(255) not null, seq int(11) not null default 0, primary key (id) )ENGINE=InnoDB DEFAULT CHARSET=gbk; insert into select_menu values('A1','列表A选项1','INIT',1); insert into select_menu values('A2','列表A选项2','INIT',2); insert into select_menu values('B11','列表B选项11','A1',1); insert into select_menu values('B12','列表B选项12','A1',2); insert into select_menu values('B13','列表B选项13','A1',3); insert into select_menu values('B21','列表B选项21','A2',1); insert into select_menu values('B22','列表B选项22','A2',2); insert into select_menu values('C111','列表C选项111','B11',1); insert into select_menu values('C112','列表C选项112','B11',2); insert into select_menu values('C121','列表C选项121','B12',1); insert into select_menu values('C122','列表C选项122','B12',2); insert into select_menu values('C131','列表C选项131','B13',1); insert into select_menu values('C132','列表C选项132','B13',2); insert into select_menu values('C211','列表C选项211','B21',1); insert into select_menu values('C212','列表C选项212','B21',2); insert into select_menu values('C221','列表C选项221','B22',1); insert into select_menu values('C222','列表C选项222','B22',2)
JDBC的Utils类:
package com.lanp.ajax.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * 连接数据库的工具类,被定义成不可继承且是私有访问 * @author lanp * @since 2012-2-29 22:27 */ public final class DBUtils { private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:neusoft"; private static String user = "scott"; private static String psw = "tiger"; private static Connection conn; static { try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException e) { e.printStackTrace(); throw new RuntimeException(e); } } private DBUtils() { } /** * 获取数据库的连接 * @return conn */ public static Connection getConnection() { try { conn = DriverManager.getConnection(url, user, psw); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } return conn; } /** * 释放资源 * @param conn * @param pstmt * @param rs */ public static void closeResources(Connection conn, PreparedStatement pstmt, ResultSet rs) { if (null != rs) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } finally { if (null != pstmt) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } finally { if (null != conn) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } } } } } } }
JSP后台:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <%@ page language="java"%> <%@ page import="java.sql.*"%> <%@ page import="com.lanp.ajax.db.DBUtils;"%> <%! //访问数据库取得下级选项信息 String getOptions(String selectedId) { int counter = 0; //计数器 StringBuffer opts = new StringBuffer("{"); //保存选项信息 String sql = "select * from select_menu where pid = ? order by seq asc";//定义查询数据库的SQL语句 Connection conn = null; //声明Connection对象 PreparedStatement pstmt = null; //声明PreparedStatement对象 ResultSet rs = null; //声明ResultSet对象 try { conn = DBUtils.getConnection(); //获取数据库连接 pstmt = conn.prepareStatement(sql); //根据sql创建PreparedStatement pstmt.setString(1, selectedId); //设置参数 rs = pstmt.executeQuery(); //执行查询,返回结果集 while (rs.next()) { //遍历结果集 //如果不是第一项,追加一个“,”用于分隔选项 if (counter > 0) { opts.append(","); } opts.append("'"); opts.append(rs.getString("id")); opts.append("':'"); opts.append(rs.getString("text")); opts.append("'"); counter++; //计数器加1 } } catch (SQLException e) { System.out.println(e.toString()); } finally { DBUtils.closeResources(conn,pstmt,rs); } opts.append("}"); return opts.toString(); } %> <% out.clear(); //清空当前的输出内容(空格和换行符) String selectedId = request.getParameter("selectedId"); //获取selectedId参数 String optionsInfo = getOptions(selectedId); //调用getOptions方法取得下级选项信息 out.print(optionsInfo); //输出下级选项信息 %>
Html前台:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>多级联动菜单</title> <script type="text/javascript"> var xmlHttp; //用于保存XMLHttpRequest对象的全局变量 var targetSelId; //用于保存要更新选项的列表id var selArray; //用于保存级联菜单id的数组 //用于创建XMLHttpRequest对象 function createXmlHttp() { //根据window.XMLHttpRequest对象是否存在使用不同的创建方式 if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); //FireFox、Opera等浏览器支持的创建方式 } else { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式 } } //获取列表选项的调用函数 function buildSelect(selectedId, targetId) { if (selectedId == "") { //selectedId为空串表示选中了默认项 clearSubSel(targetId); //清除目标列表及下级列表中的选项 return; //直接结束函数调用,不必向服务器请求信息 } targetSelId = targetId; //将传入的目标列表id赋值给targetSelId变量 createXmlHttp(); //创建XmlHttpRequest对象 xmlHttp.onreadystatechange = buildSelectCallBack; //设置回调函数 xmlHttp.open("GET", "select_menu.jsp?selectedId=" + selectedId, true); xmlHttp.send(null); } //获取列表选项的回调函数 function buildSelectCallBack() { if (xmlHttp.readyState == 4) { var optionsInfo = eval("("+xmlHttp.responseText+")"); //将从服务器获得的文本转为对象直接量 var targetSelNode = document.getElementById(targetSelId); clearSubSel(targetSelId); //清除目标列表中的选项 //遍历对象直接量中的成员 for (var o in optionsInfo) { targetSelNode.appendChild(createOption(o, optionsInfo[o])); //在目标列表追加新的选项 } } } //根据传入的value和text创建选项 function createOption(value, text) { var opt = document.createElement("option"); //创建一个option节点 opt.setAttribute("value", value); //设置value opt.appendChild(document.createTextNode(text)); //给节点加入文本信息 return opt; } //清除传入的列表节点内所有选项 function clearOptions(selNode) { selNode.length = 1; //设置列表长度为1,仅保留默认选项 selNode.options[0].selected = true; //选中默认选项 } //初始化列表数组(按等级) function initSelArray() { selArray = arguments; //arguments对象包含了传入的所有参数 } //清除下级子列表选项 function clearSubSel(targetId) { var canClear = false; //设置清除开关,初始值为假 for (var i=0; i<selArray.length; i++) { //遍历列表数组 if (selArray[i]==targetId) { //当遍历至目标列表时,打开清除开关 canClear = true; } if (canClear) { //从目标列表开始到最下级列表结束,开关始终保持打开 clearOptions(document.getElementById(selArray[i])); //清除该级列表选项 } } } </script> </head> <!-- 页面加载完毕做两件事:1.初始化列表数组 2.为第一个列表赋值 --> <body onload="initSelArray('selA','selB','selC');buildSelect('INIT', 'selA')"> <h1>多级联动菜单</h1> <table> <tr> <td>列表A</td> <td> <select name="selA" id="selA" onchange="buildSelect(this.value, 'selB')"> <option value="" selected>------请选择------</option> </select> </td> </tr> <tr> <td>列表B</td> <td> <select name="selB" id="selB" onchange="buildSelect(this.value, 'selC')"> <option value="" selected>------请选择------</option> </select> </td> </tr> <tr> <td>列表C</td> <td> <select name="selC" id="selC"> <option value="" selected>------请选择------</option> </select> </td> </tr> </table> </body> </html>
相关推荐
在"AJAX三级联动菜单"项目中,主要涉及以下几个关键技术点: 1. **HTML结构**:首先,我们需要创建一个HTML结构来展示菜单,这通常包括三个下拉列表,分别对应一级、二级和三级菜单。每个下拉列表的选择事件将触发...
在本项目中,“ajax三级联动菜单”利用Ajax实现了动态的、多级关联的下拉菜单功能。这种功能常见于网站的地区选择、商品分类等场景,用户在选择某一选项时,下一级菜单会根据前一级的选择自动更新,提供更加精确的...
Ajax三级联动菜单是一种常见的前端交互设计,常用于网站的数据筛选或导航,比如在课程选择、商品分类等场景中。在这个项目中,我们看到涉及到“学院”、“专业”和“班级”三张表的关联,这通常意味着用户在选择时,...
【jsp+ajax 三级联动菜单】是一个典型的Web开发技术应用场景,它主要利用JavaServer Pages(JSP)和Asynchronous JavaScript and XML(AJAX)来实现动态网页中的数据交互和页面更新。在这个例子中,我们看到的是一个...
综上所述,这个项目展示了如何使用Struts2作为后端控制器,jQuery处理前端交互,Ajax实现异步数据传输,以及JSON作为数据交换格式,共同构建一个功能完善的三级联动菜单。开发者需要对这些技术有深入理解,才能有效...
基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar基于Ajax的三级联动下拉菜单.rar
联动菜单在Web开发中是一种常见的交互设计,它通常用于实现数据层级关系的展现和操作,如省份-城市-区县的三级联动选择。本资源包“联动菜单大全”包含了多种类型的联动菜单实现,包括与数据库交互的、使用AJAX技术...
总之,实现Ajax三级联动的关键在于利用JavaScript和Ajax技术进行动态数据交互,通过监听用户的选择事件,动态加载并更新下拉菜单选项。这一过程涉及前端与后端的紧密协作,以提供流畅、无刷新的交互体验。
struts2+jsp+json+javascript实现的三级下拉菜单,没有service和dao层,数据是虚拟的。需要的欢迎下载。项目直接导入myeclipse就可以使用。访问路径localhost:8080/ajax_day02_hw/proviencecityarea.jsp
三级联动Ajax菜单(包含省市数据) ; charset=utf-8" /> var xmlHttp; var requestType=""; function createXMLHttpRequest() { if(window.ActiveXObject) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP...
在三级联动中,JavaScript主要负责监听用户的选择事件,当用户在一级、二级菜单中选择项目时,触发Ajax请求,向服务器发送请求数据,并接收服务器返回的数据。然后,JavaScript会动态更新DOM,填充三级菜单的内容。 ...
【Ajax四级联动菜单】是一种基于Ajax技术实现的动态下拉菜单功能,通常用于网页上的地区选择,例如国家、省份、城市、区县等。在这个示例中,它使用了Oracle数据库存储四级菜单的数据,并结合JSP(JavaServer Pages...
在城市三级联动菜单中,当用户在下拉框中选择一个城市时,我们会触发一个AJAX请求,发送当前选中的城市ID到服务器。 JSP(JavaServer Pages)作为服务器端脚本语言,用于生成动态网页内容。在本案例中,JSP将负责...
"商品发布三级联动菜单js代码" 是一种实现这一功能的技术解决方案,它常见于商城网站,提升用户体验,增强商品搜索的准确性。这种技术主要依赖JavaScript(JS)语言,通过前端代码实现页面元素的动态交互。 一、...
在网页开发中,"ajax三级联动"是一种常见的交互设计,主要应用于下拉菜单或选择框,如城市选择,其中包含省、市、区三个级别。这种功能能够为用户提供流畅的体验,无需每次选择都刷新整个页面,提高了网页的响应速度...
淘宝商品发布系统中的三级联动菜单是一种常见的交互设计,主要用于商品分类选择。在电子商务平台中,为了精确地将商品归类,通常会采用多级分类的方式,这样用户在发布商品时可以方便地找到最合适的类别。这个"淘宝...
在网页设计中,三级联动菜单是一种常见的交互设计模式,它主要用于地理位置信息的选择,例如省、市、区的选取。这种菜单结构允许用户通过逐级下拉选择的方式,快速定位到他们想要的位置。在这个案例中,我们关注的是...
在网页设计中,"三级联动菜单"是一种常见的交互元素,特别是在复杂的网站导航系统中,它能够帮助用户高效地浏览和定位信息。三级联动菜单通常指的是一个包含主菜单、子菜单和孙菜单的多层次下拉菜单结构,用户在选择...
在网页开发中,"Ajax三级联动 省市区" 是一种常见的交互设计,它利用Ajax技术实现省份、城市、区县三个级别的下拉菜单联动效果。这种设计在用户填写地址或者选择区域时提供了便捷的用户体验,用户只需选择一个级别,...