Py学习  »  Jquery

如何使用Jquery使下拉列表依赖于laravel中的另一个下拉列表?

Developer • 4 年前 • 600 次点击  

我有三张桌子。。我想得到与一个地方相关联的类别。。所以当我选择一个地方时,它会过滤类别并显示该地方的类别列表。 建立了多对多的关系。

-----     -------------    ------------
place     category_place      category
------    --------------   ------------
id         place_id          id
name        category_id       name
-------------------------------------

位置模型:

   public function categories()
    {
        return $this->belongsToMany('App\Category','category_places','place_id','category_id');
    }


在我的项目控制器中

     public function create()
    {
        $activeMenu = 'placetypes';
        $placetype = new PlaceType();
        return view('Admin.placeTypes.create',['placetype'=>$placetype,'activeMenu'=>$activeMenu]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(PlaceTypeFormRequest $request)
    {
//        PlaceType::create([
//            'name'=>$request->input('name'),
//            'icon'=>$request->input('icon'),
//            'status'=>$request->input('status'),
//        ]);
        if($request->hasFile('image_name'))
        {
            $filenameWithExt = $request->file('image_name')->getClientOriginalName();
            $filename = pathinfo($filenameWithExt,PATHINFO_FILENAME);
            $extension = $request->file('image_name')->getClientOriginalExtension();
            $fileNameToStore = $filename.'_'.time().'.'.$extension;
            $path = $request->file('image_name')->storeAs('public/photos',$fileNameToStore);
        }else
        {
            $fileNameToStore = 'No-Image-Available.png';
        }
        $pt = new PlaceType();
        $pt->name = $request->input('name');
        $pt->status = $request->input('status');
        $pt->icon = $fileNameToStore;
        $pt->save();

        return redirect('/placeTypes')->with('succes','تمت إضافة قسم المحل بنجاح');
    }

在ruoutes web.php中

Route::resource('places','Admin\PlaceController');

....

   <div class="form-group" >
                <label class="text-primary" dir="rtl" for="exampleFormControlSelect1">{{trans('admin.theplace')}}</label>
                <select class="form-control" name="place" data-style="btn btn-link" id="exampleFormControlSelect1">
                    @foreach($places as $pt)
                    <option value="{{$pt->id}}" {{ ($pt->name)? "selected" : '' }}  >{{$pt->name}}</option>
                    @endforeach
                </select>
            </div>
            <div class="form-group" >
                <label class="text-primary" dir="rtl" for="exampleFormControlSelect1">{{trans('admin.itemCats')}}</label>
                <select class="form-control" name="itemcat" id="category" data-style="btn btn-link" id="exampleFormControlSelect1">
                    @foreach($categories as $cat)
                    <option value="{{ $cat->id }}" {{ (isset($cat->name))? "selected" : '' }}  >{{$cat->name}}</option>
                    @endforeach
                </select>
            </div>

Jquery代码:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script>
        function dropdown(msg){
            var place=msg;
            $.ajax({
                url: 'getcategory/'+place,
                type: 'get',
                dataType: 'json',
                success: function(response){
                    $("#category").empty();

                    var len = 0;
                    if(response['data'] != null){
                        len = response['data'].length;
                    }
                    if(len > 0){
                        // Read data and create <option >
                        for(var i=0; i<len; i++){

                            var id = response['data'][i].id;
                            var name = response['data'][i].name;

                            var option = "<option value='"+name+"'>"+name+"</option>";

                            $("#category").append(option);
                        }
                    }

                }
            });
        }
    </script>
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54286
 
600 次点击  
文章 [ 3 ]  |  最新文章 4 年前
Ben Pople
Reply   •   1 楼
Ben Pople    4 年前

与其向getcategory/{place}发出GET请求,不如尝试向getcategory发出请求,并将place id作为周长传递。您还需要在place下拉列表中使用change方法。

jQuery公司

$('#exampleFormControlSelect1').change(function() {

 $.ajax({
  url: '/getcategory',
  type: 'GET',
  data: {id: $('#exampleFormControlSelect1').val()}
 }).done(function(response){
    //what you want to do with your response//
  });
});

控制器

public function getCategory(Request $request)
    {

        return Place::where('id', $request->id)->categories()->pivot->category_id->get();
    }

Abdulmalik Alsufayran
Reply   •   2 楼
Abdulmalik Alsufayran    4 年前

我必须经常这样做,这是我的方式
HTML/刀片

<select name="select_name" id="select1" class="form-control">
<option value="">choose</option
@foreach($models as $model)
<option value="{{ $model->id }}">{{ $model->attribute }}</option>
@endforeach
</select>

<select name="select_name" id="select2" class="form-control">
<option value="">choose select 1 first</option>
</select>

$("#select1").change(function(e){
var model = e.target.value;
$.get("/api/your-route?input="+model, function(data){
  $("#select2").empty();
  $("#select2").append("<option value=''>choose</option>");

  $.each(data, function(index, obj){
  $("#select2").append("<option value='model.id'>model.attribute</option>");
});
});
});

拉瓦维尔

public function func_name(Request $request){
//if you work with Laravel 5.8 or older, you could you the input facade
$childern = Child::where('parent_id', $request->input('parent'))->get();

return response()->json($childern, 200);
// if you want to use a resource, that's even better
}

它对我来说一直都是一种魅力,因为每次父对象发生变化时,我都会从api中获取值,所以我不必担心有人会利用检查器中的值

albus_severus
Reply   •   3 楼
albus_severus    4 年前

使用onchange。试试这个


<div class="form-group" >
                <label class="text-primary" dir="rtl" for="exampleFormControlSelect1">{{trans('admin.theplace')}}</label>
                <select class="form-control" name="place" data-style="btn btn-link" id="exampleFormControlSelect1">
                    @foreach($places as $pt)
                    <option value="{{$pt->id}}" {{ ($pt->name)? "selected" : '' }}  >{{$pt->name}} onchange="dropdown('{{$p->id}}')"</option>
                    @endforeach
                </select>
            </div>
            <div class="form-group" >
                <label class="text-primary" dir="rtl" for="exampleFormControlSelect1">{{trans('admin.itemCats')}}</label>
                <select class="form-control" name="itemcat" id="category" data-style="btn btn-link" id="exampleFormControlSelect1">
                    @foreach($categories as $cat)
                    <option value="{{ $cat->id }}" {{ (isset($cat->name))? "selected" : '' }}  >{{$cat->name}}</option>
                    @endforeach
                </select>
            </div>