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创建createXmlHttpRequest对象示例代码
Feb 10 Javascript
js实例属性和原型属性示例详解
Nov 23 Javascript
12个超实用的JQuery代码片段
Nov 02 Javascript
JS拖拽组件学习使用
Jan 19 Javascript
编写高质量JavaScript代码的基本要点
Mar 02 Javascript
js判断浏览器是否支持严格模式的方法
Oct 04 Javascript
js获取ip和地区
Mar 10 Javascript
详解webpack解惑:require的五种用法
Jun 09 Javascript
JS全角与半角转化实例(分享)
Jul 04 Javascript
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
Apr 04 Javascript
vue图片加载失败时用默认图片替换的方法
Aug 29 Javascript
react如何快速设置文件路径别名
Apr 28 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
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
一个简洁实用的PHP缓存类完整实例
2014/07/26 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
PhpSpreadsheet设置单元格常用操作汇总
2020/11/13 PHP
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
jquery实现简单合拢与展开网页面板的方法
2015/09/01 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
JS实现获取当前所在周的周六、周日示例分析
2019/05/11 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python 递归函数详解及实例
2016/12/27 Python
python中列表和元组的区别
2017/12/18 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
Pandas的数据过滤实现
2021/01/15 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
大学毕业感言200字
2014/03/09 职场文书
交警个人先进事迹材料
2014/05/11 职场文书
投标保密承诺书
2014/05/19 职场文书
赡养老人协议书范本
2015/08/06 职场文书
靠谱准确的求职信
2019/04/02 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
Python中相见恨晚的技巧
2021/04/13 Python