ホームページ  >  記事  >  ウェブフロントエンド  >  Ajaxカスケードメニュー実装方法事例分析

Ajaxカスケードメニュー実装方法事例分析

高洛峰
高洛峰オリジナル
2016-12-03 16:25:42995ブラウズ

この記事の例では、ajax カスケード メニューの実装方法を説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

効果は次のとおりです:

Ajaxカスケードメニュー実装方法事例分析

最初の項目を選択すると、2番目と3番目の項目の内容がそれに応じて変わります。
2番目の項目を選択すると、それに応じて3番目の項目の内容が変わります。
3 番目の項目は 1 番目と 2 番目の項目には影響しません。

言及する価値のある点がいくつかあります:

1. 1.html はフロントエンド スプライシングですか、それともバックグラウンド スプライシングですか?

私は、トラフィックとバックエンドのリソースを節約できるフロントエンド スプライシングを選択しました。これはまた、プログラム処理とより一致しています。一般に、バックグラウンドはデータの提供のみを担当します。

json を通じてフロントデスクに渡すと、フロントデスクがそれを取得して処理します。

ajax関数

function ajaxgetbigclass(val){
  $.ajax({
      type:"POST",
      async:false, 
      url:"/default/index/ajax/do/ajaxgetbigclass",
      data:"typeid="+val,
      success:function(response){
        if(response){
          res = response;
        }else{
          res = false;
        }
      }
    });
  return res;
}
function ajaxgetsmallclass(val){
  $.ajax({
      type:"POST",
      async:false, 
      url:"/default/index/ajax/do/ajaxgetsmallclass",
      data:"bigclassid="+val,
      success:function(response){
        if(response){
          res = response;
        }else{
          res = false;
        }
      }
    });
  return res;
}

バックエンドajax処理コード

case 'ajaxgetbigclass': 
$typeid = trim($this->_getParam('typeid'));
$daoNews = new dao_news();
if(isset($typeid)){
  $bigClass = $daoNews->getBigClassByType($typeid,true);
  if($bigClass){
    $json = json_encode($bigClass);
    echo $json;
  }else{
    echo FALSE;
  }
}else{
  echo FALSE;
}
break;
case 'ajaxgetsmallclass': 
$bigclassid = trim($this->_getParam('bigclassid'));
$daoNews = new dao_news();
if(isset($bigclassid)){
  $smallClass = $daoNews->getSmallClassByBigClass($bigclassid,true);
  if($smallClass){
    $json = json_encode($smallClass);
    echo $json;
  }else{
    echo FALSE;
  }
}else{
  echo FALSE;
}
break;

ajax関数を呼び出してHTML関数

function setbigclass(id,flag){
    var flag = arguments[1] ? arguments[1] : false;//默认值
    var res = ajaxgetbigclass(id);
    //alert(res);
    if(res){
      myobj = eval(res);
      for(var i=0;i<myobj.length;i++){ 
          strHtml+="<option value=&#39;"+myobj[i].id+"&#39;>"+myobj[i].name+"</option>";
      } 
      $("#bigclassid").html(strHtml);
    }else{
      var strHtml = "<option value=&#39;&#39;>无子选项</option>";
      $("#bigclassid").html(strHtml);
    }
    if(flag&&res){
      return myobj[0].id;
    }
}
function setsmallclass(id){
    var res = ajaxgetsmallclass(id);
    //alert(res);
    if(res){
      myobj = eval(res);
      var strHtml = "<option value=&#39;&#39;>请选择</option>";
      for(var i=0;i<myobj.length;i++){ 
          strHtml+="<option value=&#39;"+myobj[i].id+"&#39;>"+myobj[i].name+"</option>";
      } 
      $("#smallclassid").html(strHtml);
    }else{
      var strHtml = "<option value=&#39;&#39;>请选择</option><option value=&#39;&#39;>无子选项</option>";
      $("#smallclassid").html(strHtml);
  }
}

main関数、イベントアクション

$(function(){
  //ajax级联
  $("#typeid").change(function(){
    var id = $(this).val();
    var res = setbigclass(id,true);
    if(res){
      setsmallclass(res);
    }else{
      setsmallclass(0);
    }
  });
  $("#bigclassid").change(function(){
    var id = $(this).val();
    setsmallclass(id);
  });
});

2. バックグラウンドクエリの機能化。

public function getType($where = false, $order = &#39;typeid ASC&#39;, $pagesize = false, $offset = false, $count = false, $from = false, $join = false, $group = false){
    return $this->getData($this->_typename,$where,$order,$pagesize,$offset,$count,$from,$join,$group);
}
public function getTypeName($flag=false){
    $where = array();
    $aType = $this->getType($where);
    if($aType){
      if($flag){
        foreach ($aType as $key => $value) {
          $type[$key][&#39;id&#39;] = $value[&#39;typeid&#39;];
          $type[$key][&#39;name&#39;] = $value[&#39;typename&#39;];
        }
        return $type;
      }else{
        foreach ($aType as $key => $value) {
          $type[$value[&#39;typeid&#39;]] = $value[&#39;typename&#39;];
        }
        return $type;
      }
    }else{
      return false;
    }
}
public function getBigClass($where = false, $order = &#39;BigClassID ASC&#39;, $pagesize = false, $offset = false, $count = false, $from = false, $join = false, $group = false){
    return $this->getData($this->_bigname,$where,$order,$pagesize,$offset,$count,$from,$join,$group);
}
public function getBigClassByType($typeid = 60,$flag=false){
    $where = array();
    $where[&#39;BigClass.typeid =?&#39;] = array("type"=>1,"val"=>$typeid);
    //print_r($where);exit;
    $from = array(&#39;BigClassID&#39;,"BigClassName","convert(text,BigClassMaster) as BigClassMaster","typeid"); 
    $aBigClass = $this->getBigClass($where, false, false, false, false,$from);
    if($aBigClass){
      if($flag){
        foreach ($aBigClass as $key => $value) {
          $bigClass[$key][&#39;id&#39;] = $value[&#39;BigClassID&#39;];
          $bigClass[$key][&#39;name&#39;] = $value[&#39;BigClassName&#39;];
        }
        return $bigClass;
      }else{
        foreach ($aBigClass as $key => $value) {
          $bigClass[$value[&#39;BigClassID&#39;]] = $value[&#39;BigClassName&#39;];
        }
        return $bigClass;
      }
    }else{
      return false;
    }
}
public function getSmallClass($where = false, $order = &#39;SmallClassID ASC&#39;, $pagesize = false, $offset = false, $count = false, $from = false, $join = false, $group = false){
    return $this->getData($this->_smallname,$where,$order,$pagesize,$offset,$count,$from,$join,$group);
}
public function getSmallClassByBigClass($BigClassID = 221,$flag=false){
    $where = array();
    $where[&#39;SmallClass.BigClassID =?&#39;] = array("type"=>1,"val"=>$BigClassID);
    //print_r($where);exit;
    $aSmallClass = $this->getSmallClass($where);
    if($aSmallClass){
      if($flag){
        foreach ($aSmallClass as $key => $value) {
          $smallClass[$key][&#39;id&#39;] = $value[&#39;SmallClassID&#39;];
          $smallClass[$key][&#39;name&#39;] = $value[&#39;smallclassname&#39;];
        }
        return $smallClass;
      }else{
        foreach ($aSmallClass as $key => $value) {
          $smallClass[$value[&#39;SmallClassID&#39;]] = $value[&#39;smallclassname&#39;];
        }
        return $smallClass;
      }
    }else{
      return false;
    }
}

こうすることで、複数の場所で、複数の角度から使用できます。

3. フロントエンドjs、ドキュメント化された、同じ機能を持つjsを1つのjsファイルに配置します。コンテンツは最終的に機能化されます。

<script type="text/javascript" src="/js/news/cascade.js"></script>
<tr>
<td width="20%" height="56" align="right" >请选择分类:</td>
<td width="80%" style="padding:10px;">
<select id="typeid" name="typeid" class=" ffb-input">
    <!--{html_options options=$aType selected=$aData.typeid|default:&#39;0&#39;}-->
</select>
>
<select id="bigclassid" name="bigclassid" class=" ffb-input">
    <!--{html_options options=$aBigClass selected=$aData.bigclassid|default:&#39;0&#39;}-->
</select>
>
<select id="smallclassid" name="smallclassid" class=" ffb-input">
    <option value="">请选择</option>
    <!--{html_options class=" ffb-input" options=$aSmallClass selected=$aData.smallclassid|default:&#39;0&#39;}-->
</select>
</td>
</tr>

これにより、文書が明確になります。

最適化されたjs

$(function(){
  //ajax级联
  $("#typeid").change(function(){
    var id = $(this).val();
    setbigclass(id);
  });
  $("#bigclassid").change(function(){
    var id = $(this).val();
    setsmallclass(id);
  });
});
function setbigclass(id){
    var res = ajaxgetbigclass(id);
    var strHtml;
    if(res){
      myobj = eval(res);
      for(var i=0;i"+myobj[i].name+"";
      } 
      $("#bigclassid").html(strHtml);
      $("#bigclassid").show().change();
    }else{
      $("#bigclassid").hide();
      $("#smallclassid").hide();
    }
}
function setsmallclass(id){
    var res = ajaxgetsmallclass(id);
    if(res){
      myobj = eval(res);
      var strHtml = "";
      for(var i=0;i"+myobj[i].name+"";
      } 
      $("#smallclassid").html(strHtml);
      $("#smallclassid").show();
    }else{
      $("#smallclassid").hide();
  }
}
function ajaxgetbigclass(val){
  $.ajax({
      type:"POST",
      async:false, 
      url:"/default/index/ajax/do/ajaxgetbigclass",
      data:"typeid="+val,
      success:function(response){
        if(response){
          res = response;
        }else{
          res = false;
        }
      }
    });
  return res;
}
function ajaxgetsmallclass(val){
  $.ajax({
      type:"POST",
      async:false, 
      url:"/default/index/ajax/do/ajaxgetsmallclass",
      data:"bigclassid="+val,
      success:function(response){
        if(response){
          res = response;
        }else{
          res = false;
        }
      }
    });
  return res;
}


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。