设为首页 收藏本站
查看: 689|回复: 0

[经验分享] php+ajax的三级联动下拉菜单

[复制链接]

尚未签到

发表于 2017-12-29 17:39:00 | 显示全部楼层 |阅读模式
  封装一个三级联动,就可以在任何页面进行引用了
  先写个页面引用一下这个js
  

<head>  <meta http-equiv="Content-Type" content="text/html; " />
  <title>三级联动</title>
  <script src="../jquery-1.11.2.min.js"></script> //引入的jQuery的包
  <script src="sanjiliandong_fengzhuang.js"></script>  //引入下面的写的三级联动的封装js
  
</head>
  
<body>
  <div>
  //引用的三级联动js
  </div>
  
</body>
  

  1.首先是页面加载完成后才运行,所以要在开头写上
  

$(document).ready(function(e) {  //写入方法
  
});
  

  

  可以先将省、市、区的方法名写出
  

//填充省的方法  
function FillSheng()
  
{
  
  //方法的功能
  
}
  
//填充市的方法
  
function FillShi()
  
{
  
  //方法的功能
  
}
  
//填充区的方法
  
function FillQu()
  
{
  
  //方法的功能
  
}
  

  2.先考虑下下拉菜单的逻辑,先不着急写功能:页面加载完成后是要三个下拉菜单,菜单的元素是select,为每一个菜单起个名字,利于写方法时使用
  

var str = "<select>
$("#sanji").html(str);  //将菜单交个要使用这个封装的页面的div中  

  3.在执行时是依次显示省、市、区,然后可以将方法写入(1中)的注释处
  

FillSheng();  //填充省的方法  
FillShi();  //填充市的方法
  
FillQu();  //填充区的方法
  

  

  4.三个菜单项是联动的,也就是根据省的不同可以有不同的选项
  可以对下拉菜单项加事件,这里不用单击事件,可以用改变事件change()
  (1)点击省,市和区都改变显示
  

$("#sheng").change(function(){  //改变省,下面的市和区显示  
  FillShi();
  
  FillQu();
  
})
  

  (2)点击市,就区改变显示  
  

$("#shi").change(function(){  //这里就是改变区的  
  FillQu();
  
})
  

  

  这样,对于逻辑也就是上面的解释,下面就是对每个方法写功能了
  5.填充省的方法
  这就要根据表中的信息了,我的表中是这样的:

  不难看出规律,地区的代号和父级代号能看出,通过11---父级的11,也就是通过省能找到相应的市;然后通过1101---父级的1101,也就是通过市能找到相应的区
  省中只有一个中国中的省,那么直接定义一个代号是“0001”,然后通过AJAX进行遍历数据库找出属于中国的省
  

function FillSheng()  
{
  var pcode = "0001";   //定义的代号是0001
  $.ajax({
  async:false,  //默认是同步的,false是异步进行
  url:"sanjiliandong_chuli.php",  //处理数据的处理页面
  data:{pcode:pcode},
  type:"POST",  //数据传输方式
  dataType:"TEXT",
  success: function(data){
  //处理页面结束后执行的代码
  }
  });
  
}
  

  

  数据的处理页面:
  

<?php  
include("DBDA.class.php");  //调用封装好的数据库
  
$db = new DBDA();  //造新对象
  

  
$pcode = $_POST["pcode"];  //取出传过来的值
  

  
$sql = "select * from chinastates where parentareacode='{$pcode}'";  //找出父级代号等于传过来的值得全部信息
  

  
echo $db->StrQuery($sql);  //执行代码,转换为字符串类型:封装的转变方式在上一篇随笔中写过一遍
  

  

  处理页面执行结束之后,在ajax方法中的成功后的方法中写入结束之后的语句
  因为是字符串,所以要拆分,行列都要拆封,并且将结果给省的下拉菜单中
  

var hang = data.split("|");  //拆分行,根据“|”  
var str = "";
  
for(var i=0;i<hang.length;i++)
  
{
  var lie = hang.split("^"); //拆分列,根据“^”
  str += "<option value='"+lie[0]+"'>"+lie[1]+"</option>"; //显示索引是1的也就是名称那一列,菜单项的值是表中的地区代号那一列
  
}
  
$("#sheng").html(str); //结果放入省的下拉菜单
  

  

  执行引用js的页面走起效果:
  6.填充市和区的方法
  它的编写和省差不多,处理页面也是一样的,不同的就是传输的值
  

//填充市的方法  
function FillShi()
  
{
  
  //方法的功能,除了这两项不一样,其他的都一样
  
}
  

  

  在市菜单中定义一个填充省的值,最后遍历结束时,将值写入市的下拉菜单中 
  

var pcode = $("#sheng").val();  //将省的值在市中  

  

  在写完ajax的遍历结束时,值写入市的下拉菜单
  

$("#shi").html(str);  

  

//填充区的方法  
function FillQu()
  
{
  //方法的功能,除了这两项,其他的都没变过
  }
  

  区就是定义一个填充的市的值,最后遍历时,将值写入区的下拉菜单中
  

var pcode = $("#shi").val();   //将市值定义在区中  

  

  在写完ajax的遍历结束时,值写入区的下拉菜单  
  

$("#qu").html(str);  

  

  最后的效果就是改变一个下拉菜单,市和区的下拉菜单都变

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-429428-1-1.html 上篇帖子: 基于bootstrap 的datatable插件的使用(php版) 下篇帖子: php 获取当前时间戳 日期和时间
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表