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 基础学习笔记之文档处理
May 29 Javascript
js 实现复制到粘贴板的功能代码
May 13 Javascript
jquery ajax return没有返回值的解决方法
Oct 20 Javascript
利用window.name实现windowStorage代码分享
Jan 02 Javascript
js常用自定义公共函数汇总
Jan 15 Javascript
Jquery中Event对象属性小结
Feb 27 Javascript
jQuery简单入门示例之用户校验demo示例
Jul 09 Javascript
关于Vue.js一些问题和思考学习笔记(2)
Dec 02 Javascript
jQuery中的siblings()是什么意思(推荐)
Dec 29 Javascript
angularjs实现猜大小功能
Oct 23 Javascript
node 利用进程通信实现Cluster共享内存
Oct 27 Javascript
JS实现页面侧边栏效果探究
Jan 08 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 存储文本换行实现方法
2010/01/05 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
在PHP中实现使用Guzzle执行POST和GET请求
2019/10/15 PHP
js 动态文字滚动的例子
2011/01/17 Javascript
JS delegate与live浅析
2013/12/21 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
2018/07/06 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
党员党性分析材料
2014/02/17 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
2014年教师业务学习材料
2014/05/12 职场文书
小学英语教师先进事迹
2014/05/28 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
2016寒假假期总结
2015/10/10 职场文书
python 实现的截屏工具
2021/05/08 Python
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
如何使用python包中的sched事件调度器
2022/04/30 Python
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang