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基础的动画教程,直观易懂
Jan 10 Javascript
javascript Array.remove() 数组删除
Aug 06 Javascript
JS模板实现方法
Apr 03 Javascript
解析javascript 数组以及json元素的添加删除
Jun 26 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
Jan 04 Javascript
Three.js利用性能插件stats实现性能监听的方法
Sep 25 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
Nov 07 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
Aug 08 jQuery
微信小程序地图(map)组件点击(tap)获取经纬度的方法
Jan 10 Javascript
详解es6新增数组方法简便了哪些操作
May 09 Javascript
react用Redux中央仓库实现一个todolist
Sep 29 Javascript
Vue页面刷新记住页面状态的实现
Dec 27 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
多数据表共用一个页的新闻发布
2006/10/09 PHP
建站常用13种PHP开源CMS比较
2009/08/23 PHP
解析thinkphp中的导入文件标签
2013/06/20 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
JS弹出对话框返回值代码(asp.net后台)
2010/12/28 Javascript
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
Bootstrap select多选下拉框实现代码
2016/12/23 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
Python实现身份证号码解析
2015/09/01 Python
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
Python函数参数操作详解
2018/08/03 Python
opencv实现简单人脸识别
2021/02/19 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
Django数据库操作之save与update的使用
2020/04/01 Python
如何用border-image实现文字气泡边框的示例代码
2020/01/21 HTML / CSS
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
html5 datalist标签使用示例(自动完成组件)
2014/05/04 HTML / CSS
计算机网络毕业生自荐信
2013/10/01 职场文书
高中军训广播稿
2014/01/14 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
数学教师个人工作总结
2015/02/06 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS