【问题标题】:Laravel 4 How to show selected values in a dropdown menu by using the input::old() method?Laravel 4 如何使用 input::old() 方法在下拉菜单中显示选定的值?
【发布时间】:2015-07-15 13:08:36
【问题描述】:

我被这个困住了。

我正在使用 Laravel 4 和 select2 下拉菜单插件。

我有一个表单,用户可以从下拉菜单(select2 插件)中选择一个或多个选项。

如果验证失败,则用户将再次返回表单。至于正确的输入,我希望表单保留下拉菜单中的选定值。

这对于用户必须选择一个选项的下拉菜单来说非常好。我得到的代码如下:

          <!-- Tipo de evento -->
          <div class="form-group <?php if($errors->has('tipo_evento')){echo "has-error";}else if(Input::old('tipo_evento')) echo "has-success"; ?>">
            <label for="tipo_evento" class="col-lg-2 control-label">Tipo</label>
            <div class="col-lg-10">
              <select multiple="" 
                class="select2 req_place form-control" placeholder="Elija" data-select-search="true"
                id="tipo_evento" name="tipo_evento" ><!-- required="" -->
                  @foreach($tipo_evento as $key1=>$datum)
                      @foreach($datum as $key2=>$value)
                          @if($key2=='id')
                              <option value="{{$value}}" {{ (Input::old('tipo_evento')==$value) ? ' selected="" ' : ''}}>
                          @elseif($key2=='nombre')
                              {{$value}}</option>
                          @endif
                      @endforeach
                  @endforeach
              </select>
              @if($errors->has('tipo_evento'))
                  <p style="color: red;">{{$errors->first('tipo_evento')}}</p>
              @endif                      
            </div>
          </div>

一切正常,当表单返回时(如果出现错误),所选选项保持选中状态。

但是,对于多选的情况,也就是说,当用户可以选择一个或多个选项时,什么都没有发生,没有一个选项保持选中状态。 这是我的代码:

          <!-- Lugar en donde fue el evento -->
          <div class="form-group <?php if($errors->has('lugar')){echo "has-error";}else if(Input::old('lugar')) echo "has-success"; ?>">
            <label for="select" class="col-lg-2 control-label">Lugar(es)</label>
            <div class="col-lg-10">
              <select multiple="" 
                class="select2 req_place form-control" placeholder="Elija" data-select-search="true"
                id="lugar" name="lugar[]" ><!-- required="" -->
                  @foreach($lugares as $key1=>$datum)
                      @foreach($datum as $key2=>$value)
                          @if($key2=='id')
                              <option value="{{$value}}" {{ (Input::old('lugar[]')==$value) ? ' selected="" ' : ''}}>
                          @elseif($key2=='lugar')
                              {{$value}}</option>
                          @endif
                      @endforeach
                  @endforeach
              </select>
              <p style="color:blue;">{{Input::old('lugar[]')}}</p>
              @if($errors->has('lugar'))
                  <p style="color: red;">{{$errors->first('lugar')}}</p>
              @endif                      
            </div>
          </div>

我试过这个:

<option value="{{$value}}" {{ (Input::old('lugar[$value]')==$value) ? ' selected="" ' : ''}}>

还有这个:

<option value="{{$value}}" {{ (Input::old('lugar')==$value) ? ' selected="" ' : ''}}>

等等……

我找到了一个提示here,但我正在尝试找出如何将变量 a 不是常量或名称...

有解决这个问题的想法吗?

【问题讨论】:

    标签: laravel drop-down-menu laravel-4 jquery-select2


    【解决方案1】:

    试试(Input::old('lugar.' . $key1)(Input::old('lugar.' . $key2),我不太确定你在那里做什么。如果这没有帮助,您能否显示Input::old('lugar')$lugares 的var_dump

    编辑:

    <!-- Lugar en donde fue el evento -->
    <div class="form-group <?php if($errors->has('lugar')){echo "has-error";}else if(Input::old('lugar')) echo "has-success"; ?>">
        <label for="select" class="col-lg-2 control-label">Lugar(es)</label>
        <div class="col-lg-10">
            <select multiple class="select2 req_place form-control" placeholder="Elija" data-select-search="true" id="lugar" name="lugar[]" >
                @foreach($lugares as $key1=>$datum)
                    @foreach($datum as $key2=>$value)
                        @if($key2=='id')
                            <option value="{{$value}}" @if(is_array(Input::old('lugar')) && in_array($value, Input::old('lugar'))){{' selected'}}@endif>
                                @elseif($key2=='lugar')
                                    {{$value}}</option>
                        @endif
                    @endforeach
                @endforeach
            </select>
            <p style="color:blue;">{{Input::old('lugar[]')}}</p>
            @if($errors->has('lugar'))
                <p style="color: red;">{{$errors->first('lugar')}}</p>
            @endif
        </div>
    </div>
    

    【讨论】:

    • 你能在 var_dump(Input::old('lugar')) 或 dd(Input::old('lugar')) 时显示使用控制器代码或输出吗
    • 如果选择一个值,然后返回带有错误的表单,我会得到以下信息:Array ( [0] =&gt; 4 ) 使用下拉菜单下方的 print_r() print_r(Input::old('lugar'),true)
    • 我收到以下错误:in_array() expects parameter 2 to be array。但是,如果我像这样使用 0:&lt;option value="{{$value}}" {{ (Input::old('lugar.0')==$value) ? ' selected="" ' : ''}}&gt; 它确实有效!!!但是,如果我想将它用于多项选择,如果我尝试 &lt;option value="{{$value}}" {{ (Input::old('lugar'.$key2)==$value) ? ' selected="" ' : ''}}&gt; 它不起作用,我将如何将它用于 $variables ???
    • 你忘记了“.” Input::old('lugar.'.$key2) 不是 Input::old('lugar'.$key2)
    • 是的,我已经尝试过了&lt;option value="{{$value}}" {{ (Input::old('lugar.'.$key2)==$value) ? ' selected="" ' : ''}}&gt;,但还不行:/
    【解决方案2】:

    你可以试试这个:

    {{ Form::select('lugar[]', $tipo_evento, Input::old('lugar[]'), ['multiple' => true]) }}
    

    无需手动循环。

    【讨论】:

    • 这里的 input:old() 返回所有选择的值。如何使选择仅显示用户选择的那些值?
    【解决方案3】:

    这里有一些不必要的代码,可以很容易地清理。

    在您的控制器中构建您的选项数组,以保存视图中的所有混乱和混乱。这不是处理这个问题的最佳场所。在您的控制器中,它可能看起来像这样......

    $options = [];
    foreach($lugares as $datum) {
        foreach($datum as $value) {
            $options[$value['id']] = $value['lugar'];
        }
    }
    

    并确保将$options 传递到您的视图中。那么你的视图就变得很简单了!

    {{ Form::select('lugar[]', $options, Input::old('lugar'), array('multiple' => true, 'class' => 'select2 req_place form-control', 'placeholder' => 'Elija', 'data-select-search' => 'true', 'id' => 'lugar')) }}
    

    【讨论】:

    • Okkei,它似乎工作得更好。但是,问题是,如果返回表单,所有值似乎都被选中。最好只显示用户选择的那些值(选项)。我将如何只显示用户选择的那些值??
    • 目前应该正在发生这种情况。不知何故,所有值都被插入Input::old('lugar')。你能在某处dd(Input::old('lugar')) 看看里面有什么吗?
    • 例如,如果我选择一个(其中 id=2),则数组如下:Array ( [0] =&gt; 2 ) 然后如果选项值等于 2,则该项目应显示为选中。
    • 是的,当你传入 Input::old('lugar') 时,Laravel 应该会为你处理这个问题。它将查看该数组中的所有内容并确保其全部被选中。
    • 是的,我正在使用下拉菜单下方的print_r(Input::old('lugar'),true) ...我正在尝试找出我错过了什么...
    猜你喜欢
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 2018-08-16
    • 2011-07-06
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多