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 相关文章推荐
JQUERY获取form表单值的代码
Jul 17 Javascript
js带按钮的提示框可供选择示例代码
Sep 17 Javascript
浅析JavaScript中的CSS属性及命名规范
Nov 28 Javascript
Shell脚本实现Linux系统和进程资源监控
Mar 05 Javascript
微信小程序开发一键登录 获取session_key和openid实例
Nov 23 Javascript
第一次记录Bootstrap table学习笔记(1)
May 18 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
Sep 01 jQuery
react.js 父子组件数据绑定实时通讯的示例代码
Sep 25 Javascript
关于laydate.js加载laydate.css路径错误问题解决
Dec 27 Javascript
Javascript 编码约定(编码规范)
Mar 11 Javascript
vue中如何添加百度统计代码
Dec 19 Vue.js
javascript函数式编程基础
Sep 15 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+MYSQL开发工具及资源收藏
2007/01/02 PHP
PHP 中执行排序与 MySQL 中排序
2009/04/21 PHP
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
一个实用的php验证码类
2017/07/06 PHP
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
JavaScript中使用Object.create()创建对象介绍
2014/12/30 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
解决vue中对象属性改变视图不更新的问题
2018/02/23 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
vue组件中实现嵌套子组件案例
2020/08/31 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
json跨域调用python的方法详解
2017/01/11 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
Python读取配置文件(config.ini)以及写入配置文件
2020/04/08 Python
Flask处理Web表单的实现方法
2021/01/31 Python
世界上最大的巴士旅游观光公司:Big Bus Tours
2016/10/20 全球购物
经典而简洁的婚礼主持词
2014/03/13 职场文书
员工生日会策划方案
2014/06/14 职场文书
历史学专业求职信
2014/06/19 职场文书
企业2014年度工作总结
2014/12/10 职场文书
导游词开场白
2015/01/31 职场文书
超市督导岗位职责
2015/04/10 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
MYSQL 表的全面总结
2021/11/11 MySQL
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android