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 封装Ajax传递的数据代码
Jun 05 Javascript
javascript 面向对象全新理练之继承与多态
Dec 03 Javascript
jquery中获得元素尺寸和坐标的方法整理
May 18 Javascript
js获取当前时间显示在页面上并每秒刷新
Dec 24 Javascript
js获取元素下的第一级子元素的方法(推荐)
Mar 05 Javascript
详解Node.js串行化流程控制
May 04 Javascript
JS中的JSON对象的定义和取值实现代码
May 09 Javascript
详解vue中组件参数
Jul 09 Javascript
微信小程序仿朋友圈发布动态功能
Jul 15 Javascript
Vue核心概念Getter的使用方法
Jan 18 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
Oct 31 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
Jul 26 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 daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
php封装的验证码类分享
2017/02/26 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
2019/04/16 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
Bootstrap基本组件学习笔记之列表组(11)
2016/12/07 Javascript
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
js实现整体缩放页面适配移动端
2020/03/31 Javascript
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
python截取两个单词之间的内容方法
2018/12/25 Python
python隐藏终端执行cmd命令的方法
2019/06/24 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
localStorage 设置过期时间的方法实现
2018/12/21 HTML / CSS
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
zooplus意大利:在线宠物商店
2019/08/07 全球购物
办加油卡单位介绍信
2014/01/09 职场文书
市场营销管理制度
2014/01/29 职场文书
职业女性的职业规划
2014/03/04 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript