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的Function详细
Nov 14 Javascript
Extjs grid添加一个图片状态或者按钮的方法
Apr 03 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
Jun 05 Javascript
jQuery Ajax页面局部加载方法汇总
Jun 02 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
Jun 21 Javascript
微信小程序 闭包写法详细介绍
Dec 14 Javascript
BootStrap CSS全局样式和表格样式源码解析
Jan 20 Javascript
详解如何构建Angular项目目录结构
Jul 13 Javascript
策略模式实现 Vue 动态表单验证的方法
Sep 16 Javascript
JavaScrip如果基于url实现图片下载
Jul 03 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
Aug 07 Javascript
js实现弹窗猜数字游戏
Nov 26 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
Symfony页面的基本创建实例详解
2015/01/26 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
php处理复杂xml数据示例
2016/07/11 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
Laravel框架控制器的middleware中间件用法分析
2019/09/30 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
Python中的CURL PycURL使用例子
2014/06/01 Python
python实现爬虫下载美女图片
2015/07/14 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
python dict乱码如何解决
2020/06/07 Python
Html5元素及基本语法详解
2016/08/02 HTML / CSS
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
网络方面基础面试题
2012/11/16 面试题
就业推荐表自我鉴定
2013/10/29 职场文书
教师自荐信范文
2013/12/09 职场文书
幼儿园教师备课制度
2014/01/12 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
MySQL大小写敏感的注意事项
2021/05/24 MySQL
详解redis在微服务领域的贡献
2021/10/16 Redis
Go语言入门exec的基本使用
2022/05/20 Golang
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS