выпадающий список пуст, когда идентификатор автозаполнен - PullRequest
0 голосов
/ 13 июня 2018

Кнопка «Добавить тарификацию», уже выбранная, приводит нас к следующему интерфейсу, который позволяет нам добавить «тарификацию» после выбора «мети» и «тача», о которых идет речь.Поле идентификатора технического специалиста заполняется автоматически.Моя проблема в том, что я всегда нахожу список "Метье" пустым.

НО Когда я вручную выбираю идентификатор техника, список Метиэра больше не пуст.Спасибо.

Обратите внимание, что у каждого специалиста есть список метиэров, а у каждого "метиэра" есть список связанных тачей

enter image description here

tarificationcontroller.php

public function create($technicien_id = null)   
{
    $technicien = technicien::orderBy('id','desc')->get();
 $taches = Tache::orderBy('libelle_tache', 'asc')->get();
    $metiers = Metier::orderBy('libelle_metier', 'asc')->get();
    >with('technicien', $technicien)->with('metiers', $metiers)- 
    >with('technicien_id', $technicien_id);
}

create.blade.php

@extends('Layouts/app')
@extends('Layouts.master')
@section('content')
@if(count($errors))
<div class="alert alert-danger" role="alert">
<ul>
@foreach($errors ->all() as $message)
<li>{{$message}}</li>
@endforeach
</ul>
</div>
@endif
<script 
src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" 
    </script>
<script type="text/javascript">
var getMetiersByTechnicienUrl = "{{url('/metiersbytechnicien')}}";
var getTachesByMetierUrl = "{{url('/tachesbymetier')}}";
//console.log(getMetiersByTechnicienUrl,getTachesByMetierUrl 
,getTarificationsByTacheUrl);
function getMetiersByTechnicien(val) {
if(val.length>0) {
    var technicien_id = val;
    $.get(getMetiersByTechnicienUrl+'/'+technicien_id,function(res) 
{ var html = '<option value=">-Select-"' ; 
$.each(res.metiers,function(index,item) { 
html+=''+item.libelle_metier+''; }); $('#metiers').html(html);

    });
}
}

function getTachesByMetier(val) {
if(val.length>0) {
    var metier_id = val;
    $.get(getTachesByMetierUrl+'/'+metier_id,function(res) {
        var html = '<option value="">-Select-</option>' ;
        $.each(res.taches,function(index,item) {
            html+='<option 
value="'+item.id+'">'+item.libelle_tache+'</option>';
        });
        $('#taches').html(html);

    });
}
}
</script>
<div class="container">
<div class="row"></div>
<div class="col-md-12">

<div class="col-md-10">
    <h1>Tarification tache</h1>
<form action=" {{url ('tarification')  }}" method="post">
 {{csrf_field()}}
 <div class="form-group">
    <label for="technicien">Technicien</label>
       <select onchange="getMetiersByTechnicien(this.value)" 
 name="technicien_id" id="technicien_id" class="form-control">
               <option value="">-Select-</option>
               @foreach($technicien as $t)
                      <option value="{{$t->id }}" {{ $t->id == 
 $technicien_id ? 'selected = "selected"' : '' }}>
                            {{$t->user->nom}}
                      </option>
               @endforeach
        </select>
 </div>
 <div class="form-group">
    <div class="col-md-12">
            <div class="col-md-4">
    <label>Metier: </label>
    <select onchange="getTachesByMetier(this.value)" style="width: 
 200px" class="productm form-control" id="metiers">
        <option value="">-Select-</option>
   </select>
            </div>
            <div class="col-md-4">                                      
                <label>tache: </label>
                <select style="width: 200px" class="productname 
  form-control" name="tache_id" id="taches">
                    <option value="">-Select-</option>
                </select>
            </div>
            <div class="col-md-4">
                <label>tarification: </label>
                <input style="width: 200px" class="productname form- 
  control" type="text"  name ="Tarif" class="form-control" value=" 
  {{old('tarif')}}">

 </div>
 </div>
  </div>
   <div class="form-group">
   <input type="submit" value = "enregistrer" class="form-control 
   btn btn-primary">
    </div>
    </div>
        </div>

       </div>
<link 
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/    
bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap- 
datepicker/1.5.0/css/bootstrap-datepicker.css" rel="stylesheet">


<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap- 
datepicker/1.5.0/js/bootstrap-datepicker.js"></script>
@endsection

metiercontroler.php

public function getMetiersByTechnicien($technicien_id)
{

    $t = technicien::find($technicien_id);
    return response()->json(['metiers' => $t->metier]);
}

route.php

Route::get('tarification/create/{technicien_id?}', 
'TarificationController@create');

1 Ответ

0 голосов
/ 13 июня 2018

Для выбора технического специалиста вы заполняете его техническими данными, как показано ниже:

@foreach($technicien as $t)
            <option value="{{$t->id }}" {{ $t->id == 
 $technicien_id ? 'selected = "selected"' : '' }}>
             {{$t->user->nom}}
             </option>
 @endforeach

Для выбора более не передаются никакие данные, следовательно, когда вы проверяете выбор, данные недоступны:

<select onchange="getTachesByMetier(this.value)" style="width: 
 200px" class="productm form-control" id="metiers">
        <option value="">-Select-</option>
</select>

Что вам нужно сделать, это:

  • Так как вы уже знаете техника, который будет выбран по умолчанию при выборе техника, найдите все задания для них (вы ужедля этого есть код getMetiersByTechnicien ($ technicien_id) в вашем контроллере), поэтому передайте эти данные и заполните задания, выбранные под нагрузкой.

Выбор техника не изменяется при загрузкепоэтому событие onChange () будет срабатывать только при ручном изменении выбора техника.

Я надеюсь, что это решит вашу проблему, если это действительно так, отметьте мой ответ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...