2016-02-24 16 views
6

Ecco il mio selezionare l'opzioneValore precedente nell'opzione di selezione multipla in laravel lama

<select name="recomemded_food[]" value="" style="width:560px;" multiple class="chosen-select" > 
<option value="American Black Bear">American Black Bear</option> 
<option value="Asiatic Black Bear">Asiatic Black Bear</option> 
<option value="Brown Bear">Brown Bear</option> 
<option value="Giant Panda">Giant Panda</option> 
</select> 

E sotto è il mio codice cercando di utilizzare il ciclo foreach per ottenere il valore dell'array. ma sto ricevendo il seguente errore:

@foreach (explode(',',old('recomemded_food')) as $recomemded_food) 
{{$recomemded_food}} 
@endforeach 

messaggio di errore: explode() si aspetta parametro 2 per essere stringa

+0

'old ('recomemded_food')' è un array nel tuo caso. –

+0

Cosa vuoi raggiungere? –

+0

il valore selezionato –

risposta

6

Se si passa i valori selezionati dal controller:

$recommended_foods = ["American Black Bear", 
         "Asiatic Black Bear", 
         "Brown Bear", 
         "Giant Panda"]; 

e In view:

<select required="required" class="form-control" name="recommended_food"> 
    @foreach ($recommended_foods as $key => $food) 
     <option value="{{ $food}}" {{ (old("recommended_food") == $food ? "selected":"") }}>{{ $food }}</option> 
    @endforeach 
</select> 
+0

Se l'utente invia il modulo, è possibile che l'utente si sia dimenticato di compilare un altro modulo e di visualizzare un messaggio di errore. Il vecchio valore selezionato sarà lì? –

+0

Sì, sarà lì. –

+0

Grazie, farò un tentativo. –

4

Per me la risposta di Jilson Thomas non ha funzionato per Selezione multipla così ho cambiato in:

{{ in_array($food, old("recommended_food")) ? "selected":"") }} 
9

Dopo aver giocato un po 'mi è venuta con questo e sembra funzionare solo splendidamente

<select name="options[]" id="options" class="form-control" multiple> 
    @foreach($settings->includes->get('optionList') as $option) 
     <option value="{{ $option->id }}" {{ (collect(old('options'))->contains($option->id)) ? 'selected':'' }}>{{ $option->name }}</option> 
    @endforeach 
</select> 

io possa essere al 100% sbagliato nel sfruttando la raccogliere la funzione ma funziona bene su molti dei miei test. Voglio dire grazie a MPS come è stato il tuo esempio che mi ha fatto davvero provare come quando non ci sono dati in "recommended_food" ti verrà visualizzato un errore perché in_array richiede un array e non funzionerà bene con null quindi sono venuto con l'idea di fare qualcosa di simile.

@if (old("options")){{ (in_array($option->id, old("options")) ? "selected":"") }}@endif 

in linea ma l'uomo che sembra brutto a me corto, e lunga storia che sto usando il seguente invece

{{ (collect(old('options'))->contains($option->id)) ? 'selected':'' }} 

Spero che questo aiuti gli altri !!

0

Questo è il mio modo di fare, molto dinamico.

<select id="gender" name="gender"> 
    <option>Select</option> 
     <option value="M">Male</option> 
     <option value="F">Female</option> 
</select> 

<script> 
    var currentGender = null; 
    for(var i=0; i!=document.querySelector("#gender").querySelectorAll("option").length; i++) 
    { 
     currentGender = document.querySelector("#gender").querySelectorAll("option")[i]; 
     if(currentGender.getAttribute("value") == "{{ old("gender") }}") 
     { 
      currentGender.setAttribute("selected","selected"); 
     } 
    } 
</script> 
1

La domanda è stata posta per più scelte.

a patto di avere un campo denominato denominazione e è necessario scegliere la designazione multipla per l'aggiunta di 1 record e il nome del campo è forWhom

Durante Aggiungi

È necessario aggiungere questo {{(collect (old ('forWhom')) -> contains ($ key))?'Selezionato': ''}} pace del codice al tag opzione

che sarà simile

<select id="forWhom" name="forWhom[]" multiple class="form-control chosen"> 
    <option value="">--- Select ---</option> 
    @foreach ($desgInfo as $key => $value) 
     <option value="{{ $key }}" 
      {{ (collect(old('forWhom'))->contains($key)) ? 'selected':'' }} /> 
      {{ $value }} 
     </option> 
    @endforeach 
</select> 

Durante Modifica

è necessario aggiungere

{{ (collect(old('forWhom'))->contains($key)) ? 'selected':'' }} 

{{ (in_array($key,$info->forWhom)) ? 'selected' : ''}} 

che assomiglia a

<select id="forWhom" name="forWhom[]" multiple class="form-control chosen"> 
     <option value="">--- Select ---</option> 
     @foreach ($desgInfo as $key => $value) 
      <option value="{{ $key }}" 
       {{ (collect(old('forWhom'))->contains($key)) ? 'selected':'' }} 
       {{ (in_array($key,$info->forWhom)) ? 'selected' : ''}} 
       /> 
       {{ $value }} 
      </option> 
     @endforeach 
    </select> 

Select all selected id's in a multiselect dropdown in laravel 5.4 with harvest chosen

Grazie

0

ero analisi dei dati JSON, e ha dovuto affrontare ripopolare la selezione multipla come array, e voleva solo un tavolo, e non stava usando keys dal momento che questo array veniva passato dal metodo show allo controller, così ho dovuto fornire i valori direttamente sul modello, nel mio caso come risorsa grezza sul modello edit.blade.php (anche nel modello create).

Questo ha funzionato per me, ed è stato il più pulito che ho potuto ottenere sulla vista.

<select id="recommended_food" multiple="multiple" size=3 style='height: 100%;' name="recommended_food[]"> 
    @if ($food->recomemded_food) 
     {{ ($val = 'Fries') 
     && $chosen = in_array($val, $food->recommended_food) 
     ? 'selected':null}} 
     <option value="{{$val}}" {{$chosen}}>{{$val}}</option> 
     {{ ($val = 'Hot Dogs') 
     && $chosen = in_array($val, $food->recommended_food) 
     ? 'selected':null}} 
     <option value="{{$val}}" {{$chosen}}>{{$val}}</option> 
     {{ ($val = 'Hamburgers') 
     && $chosen = in_array($val, $food->recommended_food) 
     ? 'selected':null}} 
     <option value="{{$val}}" {{$chosen}}>{{$val}}</option> 
    @endif 
    </select>