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 相关文章推荐
javascript 兼容所有浏览器的DOM扩展功能
Aug 01 Javascript
JS实现标签页效果(配合css)
Apr 03 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
Jun 13 Javascript
jQuery的缓存机制浅析
Jun 07 Javascript
jQuery.Callbacks()回调函数队列用法详解
Jun 14 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
Dec 03 Javascript
10个最受欢迎的 JavaScript框架(推荐)
Apr 24 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
Sep 10 Javascript
如何基于js判断浏览器版本
Feb 20 Javascript
javascript中可能用得到的全部的排序算法
Mar 05 Javascript
在react中使用vue的状态管理的方法示例
May 02 Javascript
vant自定义二级菜单操作
Nov 02 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中的traits简单使用实例
2015/05/13 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
用javascript操作xml
2006/11/04 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
js编写选项卡效果
2017/05/23 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
你准备好迎接vue3.0了吗
2020/04/28 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
python利用装饰器进行运算的实例分析
2015/08/04 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
numpy返回array中元素的index方法
2018/06/27 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
Python gevent协程切换实现详解
2020/09/14 Python
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
人力资源总监工作说明
2014/03/03 职场文书
小学毕业典礼主持词
2014/03/27 职场文书
保护黄河倡议书
2014/05/16 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
儿童诗两首教学反思
2016/02/23 职场文书
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript