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 相关文章推荐
js option删除代码集合
Nov 12 Javascript
javascript自启动函数的问题探讨
Oct 05 Javascript
jQuery页面加载初始化常用的三种方法
Jun 04 Javascript
js中各种类型的变量在if条件中是true还是false
Jul 16 Javascript
Javascript堆排序算法详解
Dec 03 Javascript
浅谈如何实现easyui的datebox格式化
Jun 12 Javascript
Webpack 服务器端代码打包的示例代码
Sep 19 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
Apr 28 jQuery
一个Vue页面的内存泄露分析详解
Jun 25 Javascript
JavaScript事件发布/订阅模式原理与用法分析
Aug 21 Javascript
在vue项目中引入高德地图及其UI组件的方法
Sep 04 Javascript
Element UI框架中巧用树选择器的实现
Dec 12 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
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
phpstrom使用xdebug配置方法
2013/12/17 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
javascript ie6兼容position:fixed实现思路
2013/04/01 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
JS获取时间的方法
2015/01/21 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
2016/10/13 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
浅谈Vue SSR中的Bundle的具有使用
2019/11/21 Javascript
python的几种开发工具介绍
2007/03/07 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
No7 Beauty美国官网:英国国民护肤品牌
2019/10/31 全球购物
教育学专业毕业生的自我评价
2013/11/21 职场文书
医学专业毕业生个人求职信
2013/12/25 职场文书
单位委托书范本
2014/04/04 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
老兵退伍标语
2014/10/07 职场文书
教师批评与自我批评
2014/10/15 职场文书
捐助感谢信
2015/01/22 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript