之前有个需求要写个类似省市县三级联动的页面,于是,网上找了点资料看了下,其实原理很简单:

当我们选择一级栏目中某条记录的时候,会获取该栏目的vaule值,并发起ajax请求,后台根据这个vaule值,返回对应的二级数据,并且将数据填充到二级栏目列表;

当我们选择二级栏目中某条记录的时候,会获取该栏目的vaule值,再次发起ajax请求,后台根据这个vaule值,返回对应的三级数据,并且将数据填充到三级列表。

多说无益,请看效果:

下面贴上这个页面的html代码(这个$data数据来源会在后面说明):

    <div class="panel-body">
<h3>查看详细栏目</h3>
<div class="signForm">
<label>一级分类名称:</label>
<div class="input-group short-row">
<select class="form-control parent" id="fClass">
<option value="">请选择一级分类名称</option>
<?php foreach ($data as $value): ?>
<option
value="<?= $value['fname'] ?>" ><?= $value['fname'] ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="signForm">
<label>二级分类名称:</label>
<div class="input-group short-row">
<select class="form-control parent" id="sClass">
<option value="">请选择二级分类名称</option> </select>
</div>
</div>
<div class="signForm">
<table class="table table-bordered bg-white">
<thead>
<tr>
<th class="text-center">ID</th>
<th>标题</th>
<th>详细图片</th>
<!--<th>描述</th>-->
<th>操作</th>
</tr>
</thead>
<col style="width: 5%">
<col style="width: 15%">
<col style="width: 15%">
<col style="width: 15%">
<col style="width: 15%">
<col style="width: 15%">
<tbody id = "list"> </tbody>
</table>
</div>
</div>

接下来是js代码:

<script>
$("#fClass").change(
function() {
getSclass();
}
);
$("#sClass").change(
function() {
getList();
}
);
function getSclass() {
//获取选定的一级分类名称
var fVal = $("#fClass").val();
//根据一级分类查二级数据
$.ajax({
//取消异步,也就是必须完成上面才能走下面
async:false,
url:"http://localhost/yii2/web/index.php/mch/book/zhong/findsname",
data:{val:fVal},
type:"get",
dataType:"JSON",
success: function(data){
var str="<option value=\"\">请选择二级分类名称</option>";
//遍历数组,把它放入str
for(var i=;i<data.length;i++){
var content = data[i];
str+="<option value=\""+content.sname+"\">"+content.sname +"</option>";
}
$("#sClass").html(str);
}
});
}
function getList() {
//获取选定的一级分类名称
var sVal = $("#sClass").val();
//根据一级分类查二级数据
$.ajax({
//取消异步,也就是必须完成上面才能走下面
async:false,
url:"http://localhost/yii2/web/index.php/mch/book/zhong/findtclass",
data:{val:sVal},
type:"get",
dataType:"JSON",
success: function(data){
var str="";//遍历数组,把它放入str
for(var i=;i<data.length;i++){
var res = data[i];
str+="<tr> <td>"+res.id+"</td><td>"+res.tname+"</td><td> <img src='"+res.tpic+"'/></td>"+"<td></td></tr>";
}
$("#list").html(str);
}
});
}
</script>

然后就是上面涉及到的两个接口,不难看出这两个action都是ZhongController.php类里面的方法:

public function actionFindsname($val)
{
$conn = \Yii::$app->db;
$sql = "select * from sclass where fname ='".$val."'";
$command =$conn->createCommand($sql);
$data = $command->queryAll();
return $res=json_encode($data);
}
public function actionFindtclass($val)
{
$conn = \Yii::$app->db;
$sql = "select * from tclass where sname ='".$val."'";
$command =$conn->createCommand($sql);
$data = $command->queryAll();
return $res=json_encode($data);
}

补充说明:

$data:这个页面(index.php)是由控制器里面的actionIndex跳过来的,那么$data自然是来自actionIndex这方法;

public function actionIndex()
{
$conn = \Yii::$app->db;
$sql = "select * from fclass";
$command =$conn->createCommand($sql);
$data = $command->queryAll();
return $this->render('index', ['data'=>$data,]);
}

这就是一级栏目数据的来源了,换种说法就是,页面的初始化数据,一级栏目数据在页面(index.php)初始化的时候就是必须有的。

然后,当这个一级栏目数据发生改变的时候,会触发这个select标签的change事件,于是就会执行相应的回调函数(getSclass());

相应地,当二级栏目数据发生改变的时候,会触发二级栏目select标签的change事件,于是就会执行相应的回调函数(getList());

这样一来,三级栏目数据就会显示出来了。

php仿经典省市县三级联动的更多相关文章

  1. jQuery - 全国省市县三级联动

    最近有空用jquery做了一个全国省市县的三级联动,在以后或许可以用的到 ,遗憾的是我还没用封装,等有空看能不能封装成一个插件 废话不多说,贴上代码: <!doctype html> &l ...

  2. wex5 实战 省市县三级联动与地址薄同步

    无论是商城,还是快递,都要用到省市县三级联动,和地址薄,今天就以实战来制作,难点有3个: 1:三级联动,有wex5组件实现,相对简单,实战里对行数据进行了拼接 2:  地址薄选项,利用inputSel ...

  3. 省市县三级联动 sql语句

    发现在网上的省市县三级联动大部分是mysql的.就算是sqlserver的,也不准确.于是就把mysql的给改了下,适用sqlserver.sql语句如下: CREATE TABLE Dic_Area ...

  4. Android 省市县 三级联动(android-wheel的使用)[转]

    转载:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个控件,以为 ...

  5. Android 省市县 三级联动(android-wheel的使用)

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个 ...

  6. 项目总结01:JSP mysql SpringMvc下中国省市县三级联动下拉框

    JSP mysql SpringMvc下中国省市县三级联动下拉框 关键词 JSP  mysql数据库  SpringMvc  ajax   Controller层  Service层  中国地区  省 ...

  7. Day 16 之二 省市县三级联动

    摘录自:雨神,供参考! province_dic = { "河北": { "石家庄": ["鹿泉", "藁城", &qu ...

  8. android:省市县三级联动(基于json和spring)

    一.请看效果图": 二.程序的代码: 1.MainActivity.java package com.loveplusplus.loader.demo.ui; import org.json ...

  9. 省市县三级联动js代码

    省市县三级联动菜单,JS全国省市县(区)联动代码,一般可以用于用户注册或分类信息二手交易网站,需要的朋友直接复制代码就可以用了,不过有朋友反馈说缺少某些城市,具体缺少哪个尚不知,请想用的朋友自己补全吧 ...

随机推荐

  1. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上

    博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813  本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...

  2. Cocos2D:塔防游戏制作之旅(十二)

    以上代码块相当直观 - 但是它分解的有些细致了. 首先,敌人通过传递HelloWorldLayer对象的引用而初始化.在init方法里,少数重要的变量被设置: maxHP:定义敌人有多经打(Tough ...

  3. Java案例:双色球的实现

    //随机生成双色球号码 //案例:6颗红球(33选1)  1颗蓝球(16选1) 代码实现如下: import java.util.Random; import java.util.Arrays; // ...

  4. OC内存管理-OC笔记

    内存管理细节:http://blog.sina.com.cn/s/blog_814ecfa90102vus2.html 学习目标 1.[理解]内存管理 2.[掌握]第一个MRC程序 3.[掌握]内存管 ...

  5. Oracle中job的实例

    一.Oracle定时器(Job)各时间段写法汇总 对于DBA来说,数据库Job再熟悉不过了,因为经常要数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库的性能优化,包括重建索引等 ...

  6. 【一天一道LeetCode】#54. Spiral Matrix

    一天一道LeetCode系列 (一)题目 Given a matrix of m x n elements (m rows, n columns), return all elements of th ...

  7. Java序列化Serializable和Externalizable

    纸上得来终觉浅,绝知此事要躬行  --陆游       问渠那得清如许,为有源头活水来  --朱熹 什么是Java序列化?为什么出现Java序列化?怎样实现Java序列化? 一.什么是Java序列化 ...

  8. 对MBProgressHUD第三方进行源码分析

    GitHub源码地址,及时更新:iOS-Source-Code-Analyze MBProgressHUD是一个为iOS app添加透明浮层 HUD 的第三方框架.作为一个 UI 层面的框架,它的实现 ...

  9. android 自定义相机

    老规矩,先上一下项目地址:GitHub:https://github.com/xiangzhihong/CameraDemo 方式: 调用Camera API 自定义相机 调用系统相机 由于需求不同, ...

  10. javascript中的in运算符

    in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望他的又操作数是一个对象:如果右侧对象拥有一个名为左操作数值的属性名,那么表达式返回true: var point = {x:1,y:1}; ...