jQuery结合PHP+MySQL实现二级联动下拉列表[实例]


Posted in Javascript onNovember 15, 2011

jQuery结合PHP+MySQL实现二级联动下拉列表[实例]

实现原理:根据省份值的变动,通过jQuery把sf_id传给后台php文件处理,php通过查询MySQl数据库,得到对应的地市名,并返回JSON数据给前端处理,即实现联动效果!

为便于讲解,这里直接给出省份:河南省(sf_id=1)  浙江省(sf_id=2),而地市和学生信息则分别建立两张数据表!编码方式均为:utf8!新建数据库并执行以下SQL语句!

/* 地市表 */ 
create TABLE IF NOT EXISTS `dishi`( 
`ds_id` int(3) auto_increment not null primary key, 
`sf_id` int(3) not null default '0', 
`ds_name` varchar(50) not null 
); 
/* 学生表 */ 
create TABLE IF NOT EXISTS `xuesheng`( 
`xs_id` int(3) auto_increment not null primary key, 
`ds_id` int(3) not null default '0', 
`xs_name` varchar(50) not null 
);接着搭个前台架子:

<table border="0" width="100%"> 
<tr> 
<td width=100>省份</td> 
<td> 
<select name="sf_id" id="sf_id" title="选择省份"> 
<option value="1">河南省</option> 
<option value="2">浙江省</option> 
</select> 
</td> 
</tr> 
<tr> 
<td>地市</td> 
<td> 
<select name="ds_id" id="ds_id" title="选择地市"> </select> 
</td> 
</tr> 
<tr> 
<td>学生姓名</td> 
<td><input type=text maxlength=20 name="xs_name" value=""></td></tr> 
</table>

接着就是jQuery部分,详解可看代码后注释部分:
<script language="JavaScript"> 
function getVal(){ 
$.getJSON("select.php",{sf_id:$("#sf_id").val()},function(json){ 
var ds_id = $("#ds_id"); 
$("option",ds_id).remove(); //清空原有的选项,也可使用 ds_id.empty(); 
$.each(json,function(index,array){ 
var option = "<option value='"+array['ds_id']+"'>"+array['ds_name']+"</option>"; 
ds_id.append(option); 
}); 
}); 
} 
//下面是页面加载时自动执行一次getVal()函数 
$().ready(function(){ 
getVal(); 
$("#sf_id").change(function(){//省份部分有变动时,执行getVal()函数 
getVal(); 
}); 
}); 
</script>

其中的select.php就是关键部分了,此文件接收前台通过$.getJSON方法传递过来的参数 sf_id,然后select.php根据省份sf_id获取对应的地市数据,再返回JSON数据,前台通过jQuery将JSON数据进行处理,写入<option>,即完成了联动效果!
$sf_id = $_GET["sf_id"]; 
if(isset($sf_id)){ 
$q=mysql_query("select * from dishi where sf_id = $sf_id"); 
while($row=mysql_fetch_array($q)){ 
$select[] = array("ds_id"=>$row['ds_id'],"ds_name"=>urlencode($row['ds_name'])); 
} 
echo urldecode(json_encode($select)); 
}

其中的urlencode()、urldecode()函数为防止中文数据库内容乱码!这里还需要注意的是,select.php不得再有其它数据返回,免得JSON返回错误!

最后补充一下,有童鞋问这效果在添加学生信息的时候能方便使用,如果有传递过来的学生信息需要编辑时,不能直接显示要编辑的学生所处的地市!这里就需要加个判断了:

首先将上面的:<select name="ds_id" id="ds_id" title="选择地市"> </select>部分做个判断

<select name="ds_id" id="ds_id" title="选择地市"> 
<?php if( isset($_GET['ds_id']) ){//返回要编辑的学生所属的地市 
$sql="SELECT * FROM dishi WHERE ds_id=".$ds_id; 
$resultds=mysql_query($sql,$conn); 
while($listds=mysql_fetch_array($resultds)){ ?> 
<option value="<?php echo $listds['ds_id'] ?>" <?php if( $listds['ds_id']==$ds_id ){ echo 'selected="selected"'; } ?> name="ds_id"><?php echo $listds['ds_name'] ?></option> 
<?php } ?> 
<?php } ?> 
</select>

然后在页面加载时,首次执行getVal()函数前做判断,说明看注释部分:
$().ready(function(){ 
//当$ds_id不为空,表示加载修改状态的表单,此时就不能在页面加载时立即调用getVal()函数,以避免无法显示要修改的账目所在的收支分类 
<?php if( empty($ds_id) ){ ?>//当$ds_id为空,表示加载添加表单,此时要在页面加载时立即调用getVal()函数,以显示当前收支类型的子分类 
getVal(); 
<?php } ?> 
$("#sf_id").change(function(){ 
getVal(); 
}); 
});

好了,差不多结束吧!
Javascript 相关文章推荐
用js判断浏览器是否是IE的比较好的办法
May 08 Javascript
JavaScript 构造函数 面相对象学习必备知识
Jun 09 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
Jun 02 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
May 04 Javascript
Angular下H5上传图片的方法(可多张上传)
Jan 09 Javascript
基于vue.js中事件修饰符.self的用法(详解)
Feb 23 Javascript
一个基于react的图片裁剪组件示例
Apr 18 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
Jul 04 Javascript
webpack4.x开发环境配置详解
Aug 04 Javascript
使用js在layui中实现上传图片压缩
Jun 18 Javascript
使用apifm-wxapi快速开发小程序过程详解
Aug 05 Javascript
如何使用原生Js实现随机点名详解
Jan 06 Javascript
读JavaScript DOM编程艺术笔记
Nov 15 #Javascript
js constructor的实际作用分析
Nov 15 #Javascript
浅谈Javascript面向对象编程
Nov 15 #Javascript
js Html结构转字符串形式显示代码
Nov 15 #Javascript
Js 时间间隔计算的函数(间隔天数)
Nov 15 #Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
Nov 14 #Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
Nov 14 #Javascript
You might like
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
php header功能的使用
2013/10/28 PHP
php生成word并下载代码实例
2019/03/15 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
jquery $.ajax入门应用二
2008/11/19 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
fullPage.js和CSS3实现全屏滚动效果
2017/05/05 Javascript
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
[01:20:06]TNC vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
python调用windows api锁定计算机示例
2014/04/17 Python
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
python调用API实现智能回复机器人
2018/04/10 Python
python+flask实现API的方法
2018/11/21 Python
python import 上级目录的导入
2020/11/03 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
意大利咖啡、浓缩咖啡和浓缩咖啡机:illy caffe
2019/03/20 全球购物
读书心得体会
2013/12/28 职场文书
公司拓展活动方案
2014/02/13 职场文书
低碳生活倡议书
2014/04/14 职场文书
学生党员公开承诺书
2014/05/28 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL
Python列表的索引与切片
2022/04/07 Python
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python