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 相关文章推荐
google地图的路线实现代码
Aug 20 Javascript
js通过八个点 拖动改变div大小的实现方法
Mar 05 Javascript
javascript实现回车键提交表单方法总结
Jan 10 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
Aug 31 Javascript
Bootstrap的图片轮播示例代码
Aug 31 Javascript
jquery分页插件jquery.pagination.js使用方法解析
Apr 01 Javascript
Backbone中View之间传值的学习心得
Aug 09 Javascript
jQuery多个版本和其他js库冲突的解决方法
Aug 11 Javascript
微信小程序侧边栏滑动特效(左右滑动)
Jan 23 Javascript
js中Number数字数值运算后值不对的解决方法
Feb 28 Javascript
Angular自定义组件实现数据双向数据绑定的实例
Dec 11 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
Aug 02 jQuery
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 取得瑞年与平年的天数的代码
2009/08/10 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
使用php自动备份数据库表的实现方法
2017/07/28 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
PHP实现的抓取小说网站内容功能示例
2019/06/27 PHP
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
JsRender实用入门教程
2014/10/31 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
python使用psutil模块获取系统状态
2016/08/27 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
python 杀死自身进程的实现方法
2019/07/01 Python
用python读取xlsx文件
2020/12/17 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
护理专业自荐信
2013/12/03 职场文书
加拿大留学自荐信
2014/01/28 职场文书
庆祝教师节活动方案
2014/01/31 职场文书
二手房购房意向书范本
2014/04/01 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
稽核岗位职责范本
2015/04/13 职场文书
小学感恩主题班会
2015/08/12 职场文书
初中化学教学反思
2016/02/22 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers
OpenCV实现反阈值二值化
2021/11/17 Java/Android