jQuery JSON实现无刷新三级联动实例探讨


Posted in Javascript onMay 28, 2013
<asp:DropDownList ID="ddl1" runat="server" Width="100px" ></asp:DropDownList> 
<asp:DropDownList ID="ddl2" runat="server" Width="100px" ></asp:DropDownList> 
<asp:DropDownList ID="ddl3" runat="server" Width="100px" ></asp:DropDownList>

js:
<script src="js/jquery-1.4.2.min.js" type="text/javascript" ></script> 
<script type="text/javascript"> 
$(document).ready(function () { 
GetA(); 
$("#ddl1").change(function () { GetB(); }); 
$("#ddl2").change(function () { GetC(); }); 
}); 
function GetA() 
{ 
$("#ddl1").html(""); 
$("#ddl1").append("<option value='-1' selected='selected'>请选择...</option>"); 
//$("select[name$=ddl1] > option:selected").remove(); 
var strId = 0; 
$.getJSON("LoadClass.ashx?ddlId=" + strId, function (data) { 
for (var i = 0; i < data.length; i++) { 
$("select[name$=ddl1]").append($("<option></option>").val(data[i].ID).html(data[i].Cname)); 
}; 
GetB(); 
}); 
} 
function GetB() 
{ 
$("#ddl2").html(""); $("#ddl3").html(""); 
var strId = $("#ddl1").attr("value"); 
if (strId != 0) { 
$.getJSON("LoadClass.ashx?ddlId=" + strId, function (data) { 
for (var i = 0; i < data.length; i++) { 
$("select[name$=ddl2]").append($("<option></option>").val(data[i].ID).html(data[i].Cname)); 
}; 
GetC(); 
}); 
} 
} 
function GetC() 
{ 
$("#ddl3").html(""); 
var strId = $("#ddl2").attr("value"); 
if (strId != 0) { 
$.getJSON("LoadClass.ashx?ddlId=" + strId, function (data) { 
for (var i = 0; i < data.length; i++) { 
$("select[name$=ddl3]").append($("<option></option>").val(data[i].ID).html(data[i].Cname)); 
}; 
}); 
} 
} 
</script>

LoadClass.ashx:
<%@ WebHandler Language="C#" Class="LoadClass" %> 
using System; 
using System.Web; 
using System.Text; 
using System.Data; 
public class LoadClass : IHttpHandler { 
public void ProcessRequest (HttpContext context) { 
// 数组 [{"ID":"275","Cname":"A1"},{"ID":"319","Cname":"A2"},{"ID":"322","Cname":"A3"}] 
int strId = Convert.ToInt32(context.Request["ddlId"]); 
string strSQL = "select * from Class where parent_Ptr=" + strId + " order by classOrder asc "; 
db d = new db(); 
DataTable dt = d.getDT(strSQL); 
StringBuilder strClass = new StringBuilder(); 
if (dt != null) 
{ 
strClass.Append("["); 
for (int i = 0; i < dt.Rows.Count; i++) 
{ 
strClass.Append("{"); 
strClass.Append("\"ID\":\"" + dt.Rows[i]["id"].ToString() + "\","); 
strClass.Append("\"Cname\":\"" + dt.Rows[i]["classCname"].ToString() + "\""); 
if (i != dt.Rows.Count - 1) 
{ 
strClass.Append("},"); 
} 
} 
} 
strClass.Append("}"); 
strClass.Append("]"); 
context.Response.ContentType = "application/json"; 
context.Response.ContentEncoding = Encoding.UTF8; 
context.Response.Write(strClass.ToString()); 
context.Response.End(); 
} 
public bool IsReusable { 
get { 
return false; 
} 
} 
}

注意:
//后台只能获取value值,不能直接获取text,需要通过js、控件中转 
//结果:275 276 277 
Label1.Text = Request.Form[ddl1.UniqueID] + " " + Request.Form["ddl2"] + " " + Request.Form[ddl3.ClientID.Replace("_", "$")] ;遇到的问题:下拉框text的值通过HiddenField控件中转 <asp:HiddenField ID="HiddenField1" runat="server" /> 
<asp:HiddenField ID="HiddenField2" runat="server" /> 
<asp:HiddenField ID="HiddenField3" runat="server" /> 
把选中下拉框的值赋予隐藏控件中: <script type="text/javascript"> 
var Key1 = $("#ddl1>option:selected").val(); 
$('#HiddenField1').val(Key1); 
var Key2 = $("#ddl2>option:selected").val(); 
$('#HiddenField2').val(Key2); 
var Key3 = $("#ddl3>option:selected").val(); 
$('#HiddenField3').val(Key3); 
</script>

选择下拉框后 动态赋值到HiddenField 控件中的值 无法与下拉框选中的值相对应!
可能与初始化有关,赋值这段代码应该放到什么地方呢?或者有什么好的方法,欢迎讨论?
Javascript 相关文章推荐
Jquery AJAX 框架的使用方法
Nov 03 Javascript
利用jQuery 实现GridView异步排序、分页的代码
Feb 06 Javascript
jQuery实现可编辑的表格实例讲解(2)
Sep 17 Javascript
js正则表达式replace替换变量方法
May 21 Javascript
JS实现刷新父页面不弹出提示框的方法
Jun 22 Javascript
javascript简易画板开发
Apr 12 Javascript
浅谈JavaScript中promise的使用
Jan 11 Javascript
微信小程序 Toast自定义实例详解
Jan 20 Javascript
jQuery实现ajax的嵌套请求案例分析
Feb 16 jQuery
浅谈Angular单元测试总结
Mar 22 Javascript
vue router 传参获取不到的解决方式
Nov 13 Javascript
vue+高德地图实现地图搜索及点击定位操作
Sep 09 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
May 28 #Javascript
js仿百度有啊通栏展示效果实现代码
May 28 #Javascript
jquery实现商品拖动选择效果代码(自写)
May 28 #Javascript
兼容IE和FF的图片上传前预览js代码
May 28 #Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
May 28 #Javascript
jQuery实现可拖动的浮动层完整代码
May 27 #Javascript
Jquery实现视频播放页面的关灯开灯效果
May 27 #Javascript
You might like
十天学会php之第二天
2006/10/09 PHP
一个更简单的无限级分类菜单代码
2007/01/16 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
PHP反射基础知识回顾
2020/09/10 PHP
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
轻松实现jquery手风琴效果
2016/01/14 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
2017/04/12 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
es6数值的扩展方法
2019/03/11 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
[02:27]《DAC最前线》之附加赛征程
2015/01/29 DOTA
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
使用python实现接口的方法
2017/07/07 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
详解Python3.6安装psutil模块和功能简介
2018/05/30 Python
Python将string转换到float的实例方法
2019/07/29 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
世界上最好的旅行夹克:BauBax
2018/12/23 全球购物
30岁生日感言
2014/01/25 职场文书
个人求职信范文分享
2014/01/31 职场文书
分公司负责人任命书
2014/06/04 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
2015幼儿园新学期寄语
2015/02/27 职场文书
Python3 如何开启自带http服务
2021/05/18 Python
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers