dongtu9823 2019-01-29 04:04 采纳率: 0%
浏览 45
已采纳

如何动态更改子类别?

This is output of image and which show all category and subcategory

What I want to achieve is to display all the categories and, when a category is clicked, its relative subcategory should be displayed.

The model view code

    <!-- Button to Open the Modal -->

      <div class="form-group col-md-8">
      <button type="button" class="form-control" data-toggle="modal" data-target="#myModal">
    Category  </button>

      <!-- The Modal -->
      <div class="modal" id="myModal">
    <div class="modal-dialog modal-lg" >
          <div class="modal-content">
          
            <!-- Modal Header -->
            <div class="modal-header">
              <h4 class="modal-title">Category</h4>
              <button type="button" class="close" data-dismiss="modal">&times;</button>
            </div>
            
            <!-- Modal body -->
            <div class="modal-body">
                    <div class="row">
                        <div class="col-md-4" >
                                    <a href="#" name="category" id="category" >            
                                        @foreach($categories as $category)
                                        <option value="{{$category->id}}">{{$category->category}}</option>
                                        @endforeach
                                     </a>
                             
                        </div>
                          <div class="col-md-4 ">
                            <a href="#" name="subcategory" id="subcategory" >
                                @foreach($subcategories as $subcategory)
                                <option value="{{$subcategory->id}}">{{$subcategory->subcategory}}</option>
                                @endforeach
                             </a>
                                
                          </div>
                          <div class="col-md-4">
                            hhh
                          </div>
                  </div>
            </div>
          </div>
        </div>
      </div>

    </div>
    <script type="text/javascript">
      $(document).ready(function() {
       
                        $('#category').change(function(){
                var categoryID = $(this).val();
                if(categoryID){
                    $.ajax({
                        type:"GET",
                        url:"{{url('/api/getSubcategory/')}}/"+categoryID,

                        success:function(res){

                            if(res){
                                
                                data = JSON.parse(res)
                                $("#subcategory").empty();
                                $("#subcategory").append('<option>Select</option>');
                                $.each(data,function(key,value){
                                    $("#subcategory").append("<option value='"+key+"'>"+value+"</option>");
                                           
                                });

                            }else{
                                $("#subcategory").empty();
                            }
                        }
                    });
                }else{
                    $("#subcategory").empty();
                }
            });
                    });
</script>

The controller code:

public function create()
{
    $categories = Category::all();
    $subcategories = Subcategory::all();

    return view('post.create', compact('categories', 'subcategories'));
}

This is the route:

Route::get('/post/create', 'PostController@create')->name('post.create');

This is the API I created, but I don't know how to use it.

public function getSubcategory(Request $request)
{
    $id = $request->id;
    $subcategories = Subcategory::where('category_id',$id)
                         ->select('subcategory','id')
                         ->pluck('subcategory', 'id');
    {{ dd(json_decode($subcategories, true)); }}

    return json_encode($subcategories);
}

API route

Route::get('api/getSubcategory/{id}', 'PostController@getSubcategory');

How can I do this at runtime, when model is changed to a subcategory of its relative category.

Please help me. I am a beginner.

I want to this type of output output which i want

</div>
  • 写回答

3条回答 默认 最新

  • 普通网友 2019-01-29 05:24
    关注

    For your dynamic subcategory use below jquery Ajax function

    <div class="modal-body">
      <div class="row">
            <div class="col-md-4" >
              <a href="#" name="category" id="category" >            
                  @foreach($categories as $category)
                  <option class="categoryList" value="{{$category->id}}">{{$category->category}}</option> <!-- add conman class for click event --> 
                  @endforeach
               </a>
            </div>
            <div class="col-md-4 ">
              <a href="#" name="subcategory" id="subcategory" >
              </a>
            </div>
      </div>
    </div>
    <script type="text/javascript">
      $('.categoryList').on('click', function(){
      var cat_id = $(this).attr('value');
      var url = "localhost:8000/api/getSubcategory/"+cat_id;
      $.ajax({
          type: "GET",
          url: url,
          dataType: "JSON",
          success: function(res)
          {
            // amusing res = {"3":"home","4":"home duplex"}; 
            var html = "";
            $.each(res, function (key, value) {
                 html += "<option value="+key+">"+value+"</option>";
            });
            $("#subcategory").html(html);
          }
      });
    });
    </script>
    

    If you want to store your data in database then remove model and add below HTML put after your last form input.

    <div class="col-md-4" >
      <select onchange="selectSubcategory(this)" name="category_id">            
          @foreach($categories as $category)
          <option value="{{$category->id}}">{{$category->category}}</option>
          @endforeach
      </select>
    </div>
    <div class="col-md-4 ">
      <select name="subcategory_id" id="subcategory_id">                                  
      </select>
    </div>
    

    below code for your dynamic subcategory

    <script type="text/javascript">
      function selectSubcategory(obj){
      var cat_id = $(obj).val();
      var url = "localhost:8000/api/getSubcategory/"+cat_id;
      $.ajax({
          type: "GET",
          url: url,
          dataType: "JSON",
          success: function(res)
          {
            // amusing res = {"3":"home","4":"home duplex"}; 
            var html = "";
            $.each(res, function (key, value) {
                 html += "<option value="+key+">"+value+"</option>";
            });
            $("#subcategory_id").html(html);
          }
      });
    }
    </script>
    

    In your controller store method get category and subcategory like below

    $request->category_id;
    $request->subcategory_id;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致