js三级联动(求思路更好)

首先看下界面:

说到select联动,我就想到用ajax获取数据加载出来。

然后就开始写,select被改变的时候,触发ajax去后台找数据,数据要自己下级分类数据和当前选择分类的商品数据。

写完之后,发现有些重复代码,获取商品这个数据,接口和js获取数据循环遍历代码好几处重复,触发三次选择框事件,都要获取对应分类的商品数据,所以要抽离出来。

前端js代码:

第一个选择框:

$("#pcate").change(function () {
         var pcate = this.value;
         $.getJSON(‘{php echo webUrl("order/print/ajaxCcate")}‘,{pcate:pcate},function (res) {

             if(res.status == 0){
                 var data = res.result;
                var html = ‘<option value="" selected>全部</option>‘;
                 if(data != ‘‘){
                     $.each(data,function(index, category){
                         html += ‘<option value="‘ + category[‘id‘] + ‘" >‘ + category[‘name‘] + ‘</option>‘;
                     })
                 }
                 getGoods();
                 $("#ccate").html("");
                 $("#ccate").html(html);
                 $("#tcate").html("<option value=‘‘ selected>全部</option>");

             }else{
                 $("#ccate").html("<option value=‘‘ selected>全部</option>");
                  $("#tcate").html("<option value=‘‘ selected>全部</option>");
                  $("#title").html("<option value=‘‘ selected>全部</option>");
             }
         })
     })

  第二个选择框:

$("#ccate").change(function () {
         var ccate = this.value;
         var pcate = $("#pcate").val();
         $.getJSON(‘{php echo webUrl("order/print/ajaxTcate")}‘,{ccate:ccate,pcate:pcate},function(res){
             if(res.status == 0){
                 var data = res.result;
                 var html = ‘<option value="" selected>全部</option>‘;

                 if(data != ‘‘){
                     $.each(data,function (index, category) {
                         html += ‘<option value="‘ + category[‘id‘] + ‘" >‘ + category[‘name‘] + ‘</option>‘;
                     })
                 }
                 getGoods();
                 $("#tcate").html("");
                 $("#tcate").html(html);

             }else{
                 getGoods();
                 $("#tcate").html("<option value=‘‘ selected>全部</option>");
             }
         })
     })

第三选择框:

$("#tcate").change(function () {
         getGoods();

     })

  获取商品:

function getGoods(){
        var p = $("#pcate").val();
        var c = $("#ccate").val();
        var t = $("#tcate").val();
        $.getJSON(‘{php echo webUrl("order/print/getGoods")}‘, {tcate:t,pcate:p,ccate:c}, function(res){
            if(res.status == 0){
                var data = res.result;
                var html = ‘<option value="" selected>全部</option>‘;
                 if(data != ‘‘){
                     $.each(data,function (index, category) {
                         html += ‘<option value="‘ + category[‘id‘] + ‘" >‘ + category[‘title‘] + ‘</option>‘;
                     })
                 }
                 $("#title").html("");
                 $("#title").html(html);
            }
      

后台接口:

public function ajaxCcate(){
        global $_GPC,$_W;
        $pcate = intval($_GPC[‘pcate‘]);
        if(empty($pcate)){
            return show_json(1);
        }
        $ccate = pdo_fetchall(‘SELECT name,level,id FROM‘.tablename(‘ewei_shop_category‘).‘WHERE uniacid = :uniacid AND parentid = :parentid AND level = 2 ORDER BY displayorder DESC‘,array(‘:uniacid‘=>$_W[‘uniacid‘],‘:parentid‘=>$pcate));

        show_json(0,$ccate);
    }

    public function ajaxTcate(){
         global $_GPC,$_W;
        $ccate = intval($_GPC[‘ccate‘]);
        if(empty($ccate)) return show_json(1);
        $tcate = pdo_fetchall(‘select name,id from‘.tablename(‘ewei_shop_category‘).‘where uniacid = :uniacid and parentid = :parentid and level = 3 order by displayorder desc‘,array(‘:uniacid‘=>$_W[‘uniacid‘],‘:parentid‘=> $ccate));

        show_json(0,$tcate);
    }

    public function getGoods(){
        global $_GPC,$_W;
        $con = ‘‘;
        $tcate = intval($_GPC[‘tcate‘]);
        $pcate = intval($_GPC[‘pcate‘]);
        $ccate = intval($_GPC[‘ccate‘]);
        if(!empty($pcate)) $con .= ‘ and pcate = ‘.$pcate;
        if(!empty($ccate)) $con .= ‘ and ccate = ‘.$ccate;
        if(!empty($tcate)) $con .= ‘ and tcate = ‘.$tcate;
        $sql = ‘select title,id from‘.tablename(‘ewei_shop_goods‘).‘where uniacid = ‘.$_W[‘uniacid‘].$con;
        $title = pdo_fetchall($sql);
        show_json(0,$title);

    }
时间: 2024-10-10 05:49:40

js三级联动(求思路更好)的相关文章

省市区县纯js三级联动(改写版:可获取选择值)

网上有许多js版本的三级联动,但是都没有完整的拿到值的文章,或是没有拿全,在网上down了一个js,并对其进行修改,可获取到省市区县三项的值,具体方式如下: jsp页面GBK编码:(在webRoot下) 在页面中添加地址隐藏域,一边向后台传值,省市县用"|"拼接出来,再到后台截取 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head>

js 三级联动 1

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>全国城市三级联动</title> <style type="text/css"> body{ background:#EEEEEE;margin:0; padding:0; font-family:"微软雅黑", Arial, Helveti

js三级联动

实例:省市区的三级联动 <body><section> <a>省份</a> <select id="province"> <option value="0">--请选择--</option> <option value="1">山东</option> //通过value来区分市的二维数组 <option value="2&q

JS三级联动实例

简单的HTML实例: <h4>选择省</h4> <div class="selectSheng"></div> <select name="sheng"> <option value="">请选择</option> </select> <select name="shi"> <option value="

js简单菜单三级联动

<!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-

三级联动第二种方法 三级联动.html

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <select id="province" name="province"> <option value="">请选择</option&

QQ JS省市区三级联动

如下图: 首先写一个静态的页面: <!DOCTYPE html> <html> <head> <title>QQ JS省市区三级联动</title> <!-- 使用QQ的省市区数据 --> <!-- <script type="text/javascript" src="http://ip.qq.com/js/geo.js"></script> --> <

js实现的省市县三级联动的最新源码

<!DOCTYPE html> <html> <head> <title>省市区三级联动</title> <!-- 直接使用QQ的省市区数据 --> <!-- <script type="text/javascript" src="http://ip.qq.com/js/geo.js"></script> --> <script type="t

【原生js】原生js的省市区三级联动

html: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>全国城市三级联动</title> 6 </head> 7 <body> 8 <div class="info&q