php仿经典省市县三级联动
之前有个需求要写个类似省市县三级联动的页面,于是,网上找了点资料看了下,其实原理很简单:
当我们选择一级栏目中某条记录的时候,会获取该栏目的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仿经典省市县三级联动的更多相关文章
- jQuery - 全国省市县三级联动
最近有空用jquery做了一个全国省市县的三级联动,在以后或许可以用的到 ,遗憾的是我还没用封装,等有空看能不能封装成一个插件 废话不多说,贴上代码: <!doctype html> &l ...
- wex5 实战 省市县三级联动与地址薄同步
无论是商城,还是快递,都要用到省市县三级联动,和地址薄,今天就以实战来制作,难点有3个: 1:三级联动,有wex5组件实现,相对简单,实战里对行数据进行了拼接 2: 地址薄选项,利用inputSel ...
- 省市县三级联动 sql语句
发现在网上的省市县三级联动大部分是mysql的.就算是sqlserver的,也不准确.于是就把mysql的给改了下,适用sqlserver.sql语句如下: CREATE TABLE Dic_Area ...
- Android 省市县 三级联动(android-wheel的使用)[转]
转载:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个控件,以为 ...
- Android 省市县 三级联动(android-wheel的使用)
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个 ...
- 项目总结01:JSP mysql SpringMvc下中国省市县三级联动下拉框
JSP mysql SpringMvc下中国省市县三级联动下拉框 关键词 JSP mysql数据库 SpringMvc ajax Controller层 Service层 中国地区 省 ...
- Day 16 之二 省市县三级联动
摘录自:雨神,供参考! province_dic = { "河北": { "石家庄": ["鹿泉", "藁城", &qu ...
- android:省市县三级联动(基于json和spring)
一.请看效果图": 二.程序的代码: 1.MainActivity.java package com.loveplusplus.loader.demo.ui; import org.json ...
- 省市县三级联动js代码
省市县三级联动菜单,JS全国省市县(区)联动代码,一般可以用于用户注册或分类信息二手交易网站,需要的朋友直接复制代码就可以用了,不过有朋友反馈说缺少某些城市,具体缺少哪个尚不知,请想用的朋友自己补全吧 ...
随机推荐
- Spring - IOC简介
DI(Dependence Injection)依赖注入: userService依赖于容器注入的 这样拿的 这个过程由容器来控制,这个称为依赖注入. IOC(Inverse of control)控 ...
- 使用批处理文件(*.bat)同时打多个cmd窗口
使用批处理文件(*.bat)同时打多个cmd窗口 最近在研究zookeeper,在本地建了几个目录,发现频繁的去各个目录启动zkServer.cmd十分繁琐,于是乎google,才有了下文: 使用批处 ...
- sql中with的用法(CTE公用表表达式):应用子查询嵌套,提高sql性能
一.WITH AS的含义 WITH AS短语,也叫子查询部分(subquery factoring),定义一个SQL片断,该片断会被整个SQL语句所用到. 有时是为了让SQL语句的可读性更高些,也可能 ...
- Linux0.11 创建进程的过程分析--fork函数的使用
/* * linux/kernel/fork.c * * (C) 1991 Linus Torvalds */ /* 注意:signal.c和fork.c文件的编译选项内不能有vc变量优化选项/Og, ...
- Linux进程实践(1) --Linux进程编程概述
进程 VS. 程序 什么是程序? 程序是完成特定任务的一系列指令集合. 什么是进程? [1]从用户的角度来看:进程是程序的一次执行过程 [2]从操作系统的核心来看:进程是操作系统分配的内存.CPU时间 ...
- Spring揭秘 读书笔记 七 BeanFactory的启动分析
首先,先看我自己画的BeanFactory启动时的时序图. 第一次接触时序图,可能有些地方画的不是很符合时序图的规则,大家只关注调用顺序即可. public static void main(Stri ...
- PS 图像调整算法— —渐变映射
这个调整简单来说就是先建立一张lookup table, 然后以图像的灰度值作为索引,映射得到相应的颜色值.图像的灰度值是由图像本身决定的,但是lookup table 却可以各种各样,所以不同的lo ...
- objc一个NetConnector类示例
NetConnector是自定义的一个类,该类使用代理的方法实现异步下载特定url页面的内容. HyNetConnector.h // // HyNetConnector.h // HyNetConn ...
- linux内核中的排序接口--sort函数
linux内核中的sort函数,其实跟我们所说的qsort函数很像,我们来看看qsort: qsort 的函数原型是 void qsort(void*base,size_t num,size_t wi ...
- redis注册成window服务
注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 开启服务 ...