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 输入框内容格式验证代码
Feb 11 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
Mar 22 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
Dec 22 Javascript
js获取页面description的方法
May 21 Javascript
JavaScript中的toLocaleDateString()方法使用简介
Jun 12 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
Jun 21 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
Aug 31 Javascript
vue项目中将element-ui table表格写成组件的实现代码
Jun 12 Javascript
JavaScript获取页面元素的常用方法详解
Sep 28 Javascript
js HTML DOM EventListener功能与用法实例分析
Apr 27 Javascript
vscode中Vue别名路径提示的实现
Jul 31 Javascript
处理canvas绘制图片模糊问题
May 11 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
substr()函数中文版
2006/10/09 PHP
php daodb插入、更新与删除数据
2009/03/19 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
php网上商城购物车设计代码分享
2012/02/15 PHP
php通过文件流方式复制文件的方法
2015/03/13 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
完善的jquery处理机制
2016/02/21 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
深入理解python中sort()与sorted()的区别
2018/08/29 Python
Python List cmp()知识点总结
2019/02/18 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
产品生产计划书
2014/05/07 职场文书
2016大学军训心得体会
2016/01/11 职场文书
初中美术教学反思
2016/02/17 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers
Redis集群的关闭与重启操作
2021/07/07 Redis