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 相关文章推荐
提高网站信任度的技巧
Oct 17 Javascript
js 判断checkbox是否选中的操作方法
Nov 09 Javascript
JSON 数字排序多字段排序介绍
Sep 18 Javascript
JS实现向表格中动态添加行的方法
Mar 30 Javascript
jquery中表单 多选框的一种巧妙写法
Sep 06 Javascript
jQuery 生成svg矢量二维码
Aug 09 Javascript
js实现动态显示时间效果
Mar 06 Javascript
JS实现加载时锁定HTML页面元素的方法
Jun 24 Javascript
angular6的table组件开发的实现示例
Dec 26 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
Apr 07 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
Mar 12 Javascript
解决vant的Toast组件时提示not defined的问题
Nov 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
把PHP安装为Apache DSO
2006/10/09 PHP
php将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
DIV菜单层实现代码
2010/11/19 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
python中list列表的高级函数
2016/05/17 Python
Python如何获取系统iops示例代码
2016/09/06 Python
python自定义异常实例详解
2017/07/11 Python
简单实现python画圆功能
2018/01/25 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
django form和field具体方法和属性说明
2020/07/09 Python
Python 可视化神器Plotly详解
2020/12/26 Python
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
会计毕业生自我鉴定
2013/11/04 职场文书
中式婚礼主持词
2014/03/13 职场文书
工作所在部门证明
2014/09/21 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
Python编程源码报错解决方法总结经验分享
2021/10/05 Python
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS