TP5(thinkphp5.0)与layui实现下拉框二级联动

最终实现效果

tp5与layui实现下拉框二级联动

例表

水果蔬菜肉类
苹果白菜牛肉
橘子萝卜羊肉
香蕉西红柿猪肉

如表格中所示,我们要实现的是,当我们选中水果的时候,二级下拉框弹出苹果、橘子、香蕉这三个选项,蔬菜,肉类也同理

数据库

首先是数据库(以MySQL为例),我们新建一个数据库 tp5,在该数据库中再新建一张表 goods ,表中分 3 个字段:
id:主键自增
name:商品名称
pid:所属父类id(pid=0 的表示是一级分类)
tp5与layui实现下拉框二级联动
tp5与layui实现下拉框二级联动

ThinkPHP

ThinkPHP中,打开application/database.php,修改数据库的相关配置项,主要是数据库名、用户名、密码这三项,其他按需修改
tp5与layui实现下拉框二级联动

这里以ThinkPHP中默认的index模块为例,打开application/index/view/index/index.html,写一个二级下拉框
tp5与layui实现下拉框二级联动

视图层写完转到控制器,打开application/index/controller/index.php,写控制器代码
tp5与layui实现下拉框二级联动

相关代码


index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="__STATIC__/layui/css/layui.css">
    <title>Document</title>
</head>

<body>
    <div class="layui-main">
        <form class="layui-form layui-form-pane" action="{:url('index/do_index')}" method="post">
            <div class="layui-form-item">
                <label class="layui-form-label">选择分类:</label>
                <div class="layui-input-inline">
                    <select name="goods_parent" id="goods_parent" lay-filter="goods_parent">
                        <option value="0"></option>
                        {volist name="list" id="vo"}
                        <option value="{$vo.id}">{$vo.name}</option>
                        {/volist}
                    </select>
                </div>
                <div class="layui-input-inline">
                    <select name="goods_son" id="goods_son" lay-filter="goods_son">
                        <option value=""></option>
                    </select>
                </div>
            </div>
        </form>
    </div>

    <script src="__STATIC__/layui/layui.js"></script>
    <script>
        /*
            加载 jquery 模块
            加载 form 模块
        */
        layui.use(['jquery', 'form'], function () {
            var $ = layui.$,
                form = layui.form;
            //商品分类二级联动
            form.on('select(goods_parent)', function (data) {
                var pid = data.value;//获取父类商品的id
                $.ajax({
                    method: "post",//传输方式
                    url: "{:url('index/do_index')}",//要传输的后台地址
                    data: { pid_key: pid },//键值对
                    //返回数据成功
                    success: function (data) {
                        $('#goods_son option').empty();
                        var goods_son_select = '';
                        for (var o in data) {
                            goods_son_select += '<option value="' + data[o].id + '">' + data[o].name + '</option>';
                        }
                        $('#goods_son').html(goods_son_select);
                        form.render('select');
                    },
                    //返回数据失败
                    error: function () {
                        alert("分类选择错误,请稍后重试!");
                    }
                })
            });
        });
    </script>
</body>

</html>

index.php

<?php

namespace app\index\controller;

use think\Controller;
use think\Request;
use think\Db;

class Index extends Controller
{
    public function index()
    {
        //读取 goods 表,获取商品父类选项,给模版变量赋值
        $list = Db::query('SELECT * FROM goods WHERE pid=0');
        $this->assign('list', $list);

        return $this->fetch();
    }

    public function do_index()
    {
        //如果是Ajax请求就接受处理数据
        if (request()->isAjax()) {

            //获取表单的请求信息
            $request = Request::instance();

            //获取Ajax传递过来的商品父类的id
            $goods_parent_id = $request->param('pid_key');

            //根据商品父类的 id 查询数据库,得到他的子类商品并返回给前台
            $goods_son = Db::table('goods')->where('pid', $goods_parent_id)->select();
            return $goods_son;
        }
    }
}

总结

tp5与layui实现下拉框二级联动

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值