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 相关文章推荐
淘宝搜索框效果实现分析
Mar 05 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
Sep 01 Javascript
JS中的substring和substr函数的区别说明
May 07 Javascript
javascript获取系统当前时间的方法
Nov 19 Javascript
JavaScript中对JSON对象的基本操作示例
May 21 Javascript
JavaScript关于提高网站性能的几点建议(一)
Jul 24 Javascript
基于JS+Canves实现点击按钮水波纹效果
Sep 15 Javascript
jQuery实现发送验证码并60秒倒计时功能
Nov 25 Javascript
Angular.js跨controller实现参数传递的两种方法
Feb 20 Javascript
JS中正则表达式全局匹配模式 /g用法详解
Apr 01 Javascript
Angular获取手机验证码实现移动端登录注册功能
May 17 Javascript
javascript 缓冲运动框架的实现
Sep 29 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生成带有雪花背景的验证码
2008/09/28 PHP
php Smarty模板生成html文档的方法
2010/04/12 PHP
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
smarty内置函数config_load用法实例
2015/01/22 PHP
PHP编译安装时常见错误解决办法
2015/05/28 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
PHP命名空间定义与用法实例分析
2019/08/14 PHP
PHP7移除的扩展和SAPI
2021/03/09 PHP
JavaScript 中的日期和时间及表示标准介绍
2013/08/21 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
2016/07/09 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
简单的通用表达式求10乘阶示例
2014/03/03 Python
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
师范毕业生求职信
2014/07/11 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
赞美教师的句子
2019/09/02 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android
Dashboard管理Kubernetes集群与API访问配置
2022/04/01 Servers