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 相关文章推荐
JavaScript 用cloneNode方法克隆节点的代码
Oct 15 Javascript
js为空或不是对象问题的快速解决方法
Dec 11 Javascript
js动态往表格的td中添加图片并注册事件
Jun 12 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
Feb 26 Javascript
JavaScript取得键盘按下方向键是哪个的方法
Aug 04 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
Dec 17 Javascript
AngularJS 整理一些优化的小技巧
Aug 18 Javascript
jQuery remove()过滤被删除的元素(推荐)
Jul 18 jQuery
浅析js中mvvm模式实现的原理
Oct 06 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
Sep 11 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
Sep 27 Javascript
vue 自定义组件添加原生事件
Apr 21 Vue.js
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
E路文章系统PHP
2006/12/11 PHP
PHP 采集程序 常用函数
2008/12/18 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
2014/05/10 PHP
PHP获取当前完整URL地址的函数
2014/12/21 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
2012/09/14 Javascript
jQuery实现鼠标经过图片预览大图效果
2014/04/10 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
浅析Python requests 模块
2020/10/09 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
C语言变量的命名规则都有哪些
2013/12/27 面试题
自我鉴定怎么写
2014/01/12 职场文书
医学专业职业生涯规划范文
2014/02/05 职场文书
生育关怀行动实施方案
2014/03/26 职场文书
法人授权委托书
2014/04/03 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
公司合作协议范文
2014/10/01 职场文书
社区灵活就业证明
2014/11/03 职场文书
2015年公司新年寄语
2014/12/08 职场文书
催款函怎么写
2015/06/24 职场文书
python_tkinter事件类型详情
2022/03/20 Python