在加载时将所选选项设置为PHP多选输入

时间:2015-07-13 09:17:08

标签: javascript php laravel

<?php
$arrayData = myModel::all();
foreach($arrayData as $arrayList){
   $pureData = array_add($pureData, $arrayList->elementValue, $arrayList->elementText);
}
echo Form::select('multiSelectName', $pureData, null, array());
?>
  1. 我正在尝试从数据库中获取数据以将值填充到多选字段中。
  2. 我正在尝试在此多选字段中选择一些值。
  3. 我怎样才能做到这一点?

    提前致谢。

2 个答案:

答案 0 :(得分:2)

一种解决方案是获取所有可用选项,然后选择已选择的选项,然后找出它们是否匹配,并创建一个设置了selected参数的select元素。

我不认为可以使用Form助手来完成 (我知道它只能用一个值完成,但没有尝试过多个值)

实施例

获取所有可用选项(尝试获取某些内容以便像id那样唯一地标识它们)

$all_options=Model::lists('id','name');

我正在使用lists方法,该方法将返回一个数组,其中包含所有可用的id作为值,而名称作为数组的键。

然后获取所有选定的值

$already_selected_options =Model::with('related_model')->lists('id','name');

(如果您正在使用这样的雄辩的东西来获得相关的ID)

然后在你看来

<select multiple>
@foreach($all_options as $name => $id)
    @if(in_array($id,$already_selected_options))
       <option value="{{$id}}" selected>{{$name}}</option>
      @else
       <option value="{{$id}}">{{$name}}</option>
    @endif
@endforeach
<select>

答案 1 :(得分:0)

我认为如果可能的话,你应该用javascript代替它。它在延迟方面几乎不引人注意,并且不会浪费服务器端的周期。这是我最近的一个项目的例子。作为奖励,如果您在select上内联声明onchange事件,它将在执行该函数后立即为您调用。

$('select.select-onload').each(function(index){
    if(typeof $(this).attr('data-selected') !== 'undefined'){
        if($(this).attr('data-selected') == ''){
            return false;
        }
        $(this).val( $(this).attr('data-selected') );
        //we may have a callback. lets manually invoke it.
        if(typeof $(this).attr('onchange') !== 'undefined'){
            var callback = $(this).attr('onchange').replace('();','').trim();
            window[callback].call(window);
        }
    }
});

用法:

<select class="select-onload" data-selected="{{id}}"> <!--whatever options value is 5 is the one that will be selected.--> </select>