JavaScript 二级联动下拉列表
根据给定的信息,我们可以提取并总结出关于“JavaScript 二级联动下拉列表”的知识点: ### 一、二级联动下拉列表概述 二级联动下拉列表是一种常见的网页交互设计模式,通常用于显示具有层级关系的数据。当用户在第一个下拉列表(主列表)中选择某个选项时,第二个下拉列表(子列表)会根据主列表的选择动态更新其内容。这种设计可以提高用户体验,使用户能够更方便地选择相关的选项。 ### 二、实现原理 1. **数据获取**:通常需要通过后台获取数据,并将其组织成具有层级关系的结构。 2. **前端技术**:主要使用 JavaScript 和 HTML 来实现下拉列表之间的联动效果。此外,可能还需要使用 CSS 进行样式美化。 3. **AJAX 技术**:使用 AJAX 实现异步请求,即在用户选择主列表项时,向服务器发送请求,获取相应的子列表数据。 ### 三、具体实现 #### 1. HTML 结构 示例代码中的 `WebForm1.aspx` 文件定义了两个下拉列表,分别是 `dListParent` 和 `dListChild`。其中 `dListParent` 的 `onChange` 事件被绑定到了 `Go(this)` 函数上,这意味着每当 `dListParent` 的值发生变化时,都会触发 `Go(this)` 函数。 ```html <asp:DropDownList onchange="Go(this)" id="dListParent" runat="server"> <asp:ListItem Value="100">Ħ</asp:ListItem> <asp:ListItem Value="101">ŵ</asp:ListItem> </asp:DropDownList> ``` #### 2. JavaScript 逻辑 - **创建 XMLHttpRequest 对象**:通过 `jb()` 函数创建 XMLHttpRequest 对象。该函数首先尝试使用 ActiveXObject 创建对象,如果失败则尝试使用 `XMLHttpRequest` 构造函数创建对象。 ```javascript function jb() { var A = null; try { A = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { A = new ActiveXObject("Microsoft.XMLHTTP"); } catch (oc) { A = null; } } if (!A && typeof XMLHttpRequest != "undefined") { A = new XMLHttpRequest(); } return A; } ``` - **处理下拉列表变化**:当 `dListParent` 下拉列表的值发生变化时,`Go(obj)` 函数会被调用。这个函数负责发起 AJAX 请求,并根据响应结果更新 `dListChild` 下拉列表。 ```javascript function Go(obj) { // 获取选中的值 var svalue = obj.value; // 构造请求 URL var weburl = "webform1.aspx?parent_id=" + svalue; // 初始化 XMLHttpRequest 对象 var xmlhttp = jb(); // 发送请求 xmlhttp.open("GET", weburl, true); // 设置回调函数 xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4) { // 完成 var result = xmlhttp.responseText; // 获取返回数据 // 清空 dListChild 下拉列表 document.getElementById("dListChild").length = 0; // 添加默认选项 document.getElementById("dListChild").options.add(new Option("请选择", "0")); if (result != "") { // 如果返回数据不为空 var allArray = result.split(","); for (var i = 1; i < allArray.length; i++) { var thisArray = allArray[i].split("|"); // 添加新的选项到 dListChild document.getElementById("dListChild").options.add(new Option(thisArray[1], thisArray[0])); } } } }; // 发送请求 xmlhttp.send(null); } ``` #### 3. 兼容性 示例代码中提到了对 IE6 和 Firefox 的支持。这表明在编写 JavaScript 代码时需要注意浏览器兼容性问题。例如,在创建 XMLHttpRequest 对象时,不同的浏览器可能需要使用不同的方法来创建,因此需要进行适当的检查和适配。 ### 四、总结 通过上述分析可以看出,实现一个简单的二级联动下拉列表涉及到 HTML、CSS 和 JavaScript 多方面的知识。特别是 JavaScript 部分,不仅需要理解基本的 DOM 操作,还需要掌握 AJAX 技术以及跨浏览器的兼容性处理。对于前端开发者而言,熟练掌握这些技能是非常重要的。
测试平台:ie6,firefox
功能:二级无刷新连动
特点:跨浏览器;提交窗体取第二下拉框的值;数据来源于数据库;以xmlhttp来发送请求,实现无刷新
请求:如果您能够找到更好的方法请告诉我,非常感谢,您的批评和建议对我是莫大的鼓励
webform1.aspx:
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="drop.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<script language="javascript">
//jb函数会根据不同的浏览器初始化个xmlhttp对象
function jb()
{
var A=null;
try
{
A=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
A=new ActiveXObject("Microsoft.XMLHTTP");
}
{
A=null
}
}
if ( !A && typeof XMLHttpRequest != "undefined" )
{
A=new XMLHttpRequest()
}
return A
}
//下面Go函数是父列表框改变的时候调用,参数是选择的条目
function Go(obj)
{
//得到选择框的下拉列表的value
var svalue = obj.value;
//定义要处理数据的页面
var weburl = "webform1.aspx?parent_id="+svalue;
//初始化个xmlhttp对象
var xmlhttp = jb();
//提交数据,第一个参数最好为get,第三个参数最好为true
xmlhttp.open("get",weburl,true);
// alert(xmlhttp.responseText);
//如果已经成功的返回了数据
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4)//4代表成功返回数据
{
var result = xmlhttp.responseText;//得到服务器返回的数据
剩余8页未读,继续阅读
- sunupper2013-03-19学习二级联动方法,谢谢分享!
- 明湖居士20182014-04-23楼主,能不能把文件扩展名加上啊,哥们我下载完了还得猜对了扩展名才能用,唉……
- 粉丝: 4
- 资源: 32
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助