THINKPHP + JQUERY 多级下拉列表联动

原文链接:http://bbs.php100.com/simple/?t502731.html


THINKPHP + JQUERY 多级下拉列表联动

前几天学习到JQUERY AJAX那一节,有个LOAD 事件。学习完后就想能不能利用LOAD这个事件来写一个多级菜单的联动呢?经过1个多小时的时间,终于写出来了。哈哈,不知道这样写合不合理,发出来大家一起分享一下。本人是菜鸟刚学习PHP不久,如果写的不好,请多指教。如果大家还有更好的改进那就更好了。

思路原理:利用jquery的change事件来触发 load事件,load事件将获取到的下拉菜单的ID值传给 模块下的方法,通过方法来找到下一级菜单的数据表,查询出符合条件的记录。最后输出到页面里。

以下是原代码和数据库文件。
数据库文件:[attachment=35569]

classa :一级分类的表
classb:二级分类的表
classc:三级分类的表
classd:四级分类的表
如果还有级别分类,那还可以断续加。。。

一、首先建一个类文件IndexAction.class.php  ..

<?php
class IndexAction extends Action {
    public function index(){
       //一级分类就不用联动了,直接实例化表 输出模板就可以。
        $m=M('Classa');
        $query=$m->select();
        $this->assign('data',$query);
        //var_dump($query);
        $this->display();
    }

    public function classa(){ //一级分类联动二级分类
        //var_dump($_POST['data']);
        //echo $_POST['data'];
        $classa_id=$_POST['data'];  //接收模板文件jquery $(load)传来参数。data
        $m=M('Classb');
        $where['classa_id']=$classa_id;
        $query=$m->where($where)->select();   //在二级分类表classb里找出字段class_id=$class_id
        //var_dump($query[0][id]);
        if($query){  //判断如果有数据就显示  二级分类   如果无数据就显示 无分类
            $temp="<option selected='selected'>二级分类</option>";
        }else{
            $temp="<option selected='selected'>无分类</option>";
        }
        //循环数组
        foreach ($query as $key=>$value)
            { 
                     $temp.="<option value='".$query[$key]['id']."'>".$query[$key]['classname']."</option>";
               
            }            
        //var_dump($query);
        //echo $m->getLastSql();
        echo $temp;
    }

        public function classb(){ //二级分类联动三级分类
        //var_dump($_POST['data']);
        //echo $_POST['data'];
        $classb_id=$_POST['data'];  //接收模板文件jquery $(load)传来参数。data
        $m=M('Classc');
        $where['classb_id']=$classb_id;
        $query=$m->where($where)->select();   //在三级分类表classc里找出字段classB_id=$classb_id
        //var_dump($query[0][id]);
        if($query){  //判断如果有数据就显示  二级分类   如果无数据就显示 无分类
            $temp="<option selected='selected'>三级分类</option>";
        }else{
            $temp="<option selected='selected'>无分类</option>";
        }
        //循环数组
        foreach ($query as $key=>$value)
            { 
                     
                     $temp.="<option value=".$query[$key]['id'].">".$query[$key]['classname']."</option>";
               
            }            
        //var_dump($query);
        //echo $m->getLastSql();
        echo $temp;
        
    }

        public function classc(){ //三级分类联动四级分类
        //var_dump($_POST['data']);
        //echo $_POST['data'];
        $classc_id=$_POST['data'];  //接收模板文件jquery $(load)传来参数。data
        $m=M('Classd');
        $where['classc_id']=$classc_id;
        $query=$m->where($where)->select();   //在四级分类表classd里找出字段classc_id=$classc_id
        //var_dump($query[0][id]);
        if($query){  //判断如果有数据就显示 
            $temp="<option selected='selected'>四级分类</option>";
        }else{
            $temp="<option selected='selected'>无分类</option>";
        }
        //循环数组
        foreach ($query as $key=>$value)
            { 
                     
                     $temp.="<option value=".$query[$key]['id'].">".$query[$key]['classname']."</option>";
               
            }            
        //var_dump($query);
        //echo $m->getLastSql();
        echo $temp;
        
    }
}
二、模板文件index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function(){
        //一级分类联动二级分类
        $("#classa").change(function(){
            var val=$(this).val();
            //alert(val);
            $("#classb").load("__URL__/classa",{data:val});
        });
        //二级分类联动三级分类
        $("#classb").change(function(){
            var val=$(this).val();
            //alert(val);
            $("#classc").load("__URL__/classb",{data:val});
        });
        
            //三级分类联动四级分类
        $("#classc").change(function(){
            var val=$(this).val();
            //alert(val);
            $("#classd").load("__URL__/classc",{data:val});
        });
    });
</script>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
  <p>公司名:
    <input type="text" name="name" id="name" />
</p>
  <p>类型:
    <select name="classa" id="classa">
        <option selected="selected">一级分类</option>
        <volist name='data' id='val'>
            <option value="{$val['id']}">{$val['classname']}</option>
        </volist>
    </select> 
    ----
    <select name="classb" id="classb">
        
    </select>
    ---
    <select name="classc" id="classc">
    </select>
  ---
  <select name="classd" id="classd">
  </select>
  <span>添加</span>
  </p>
  <p> </p>
  <p>内容:
    <textarea name="content" id="content" cols="45" rows="5"></textarea>
  </p>
  <p>
    <input type="submit" name="button2" id="button2" value="提交" />
  </p>
</form>

</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP代码 <?php namespace Admin\Controller; use Think\Controller; class GoodController extends Controller { public function release() { /* * 开始新的操作 * */ $data=array(); $data['productname']=$_POST['productname']; $data['introduction']=$_POST['introduction']; $data['codenumber']=$_POST['codenumber']; $data['Productunit']=I('post.Productunit'); $data['sku']=I('post.sku'); $data['province']=I('post.province'); $data['city']=I('post.city'); $data['town']=I('post.town'); $data['classification']=I('post.classification'); $data['Extendedclass']=I('post.Extendedclass'); $data['Commoditybrand']=I('post.Commoditybrand'); $data['Commoditybrand']=I('post.Commoditybrand'); $data['Shopprice']=I('post.Shopprice'); $data['Marketvalue']=I('post.Marketvalue'); $data['Capitalizedcost']=I('post.Capitalizedcost'); $data['Commission']=I('post.Commission'); $data['original_img']=I('post.original_img'); /*商品重量*/ $data['Commodityweight']=I('post.Commodityweight'); $data['mail']=I('post.mail'); /*库存数量*/ $data['Inventoryquantity']=I('post.Inventoryquantity'); /*赠送积分*/ $data['Giftpoints']=I('post.Giftpoints'); /*兑换积分*/ $data['exchange_integral']=I('post.exchange_integral'); /*商品关检词*/ $data['Keyword']=I('post.Keyword'); /*商品详情描述*/ $data['describe']=I('post.describe'); $commodity=M('commodity'); /*准备开启事物*/ $commodity->startTrans(); $result=$commodity->add($data); if(!$result){ /*回滚事物*/ $commodity->rollback(); }else{ /*提交事物*/ $commodity->commit(); } /*1导入thinkphp得我自带的auth类库 * 加锁操作。若果同个用户(判断同个用户名操作)同时加入同样的sku时, * 那么如果存在时就加不上去(数量),如果不存在时(如果不存在时的数量不一样时)就insert上去 * */ $province = M('prvices')->where ( array('pid'=>1) )->select (); $this->assign('province',$province); $this->display(); } public function getRegion(){ /* * 接收市区 * */ $Region=M("prvices"); $map['pid']=$_REQUEST["pid"]; $map['type']=$_REQUEST["type"]; $list=$Region->where($map)->select(); echo json_encode($list); } public function sku() { $this->display(); } } html: <tr> <td>商品所在地</td> <td> <select name="addres" id="province" <option value="0" selected>省份/直辖市</option> <volist name="province" id="vo"> <option value="{$vo.id}" >{$vo.name} </option> </volist> </select> <select name="city" id="city" <option value="0">市/县</option> </select> <select name="town" id="town"> <option value="0">镇/区</option> </select> </td> </tr> function loadRegion(sel,type_id,selName,url){ jQuery("#"+selName+" option").each(function(){ jQuery(this).remove(); }); jQuery("<option value=0>请选择</option>").appendTo(jQuery("#"+selName)); if(jQuery("#"+sel).val()==0){ return; } jQuery.getJSON(url,{pid:jQuery("#"+sel).val(),type:type_id}, function(data){ if(data){ jQuery.each(data,function(idx,item){ jQuery("<option value="+item.id+">"+item.name+"</option>").appendTo(jQuery("#"+selName)); }); }else{ jQuery("<option value='0'>请选择</option>").appendTo(jQuery("#"+selName)); } } ); }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值