2016-09-23 61 views
0

我有一个涉及laravel和jQuery的问题。需要动态复选框值来改变选择框的状态

我有一个表单,它有一个使用wenzhixin/multiple-select jQuery插件的多选框。

<script> 
    $('#multiselect').multipleSelect({ 
     placeholder: "Select Landing Pages", 
     filter: true 
    }); 
</script> 

该插件的启用/禁用状态所决定:检查/:未选中复选框的属性:

<script> 
    $("#toggle").click(function() { 
    if ($(this).is(":checked")) { 
     $('#multiselect').multipleSelect("disable"); 
    } else { 
     $('#multiselect').multipleSelect("enable"); 
    } 
    }); 
</script> 

最终什么,我需要这个做的是当页面/形式根据复选框的初始值,需要启用/禁用选择框:

<select multiple="multiple" id="multiselect" name="landings[]" {{ ($post->global == "1") ? "disabled='disabled'" : '' }}> 
      @foreach($landings as $landing) 
      <option {{ in_array($landing->id, $post->landings()->select('post_landing.*')->lists('landing_id')->all()) ? 'selected' : '' }} value="{{ $landing->id }}"> 
       {{ $landing->title }} 
      </option> 
      @endforeach 
     </select> 
<label style="display: inline-block; font-size: .7em;">Global Post: </label> 
      {!! Form::hidden('global', 0) !!} 
      {!! Form::checkbox('global', 1, $post->global, ['id' => 'toggle']) !!} 

这是有效的。现在,假设$ post-> global的值是“1”(并且框被选中):如果我想取消选中它,然后在选择框中选择一些选项,然后通过POST提交表单,值的选择框不会被发送。虽然,在我的POST请求中,我可以看到$ post->全局值被正确发送(global =>“0”)...但正如我所说的,请求不显示选择值数组。

在相反的情况下,一切都按预期工作:如果$ post-> global的初始值是“0”(并且该框未被选中),我可以将复选框设置为“checked”并提交表单, $ post-global的请求是“1”。同样,我也可以不选中该框并选择一些值,并将请求与值数组一起发送。我相信这个问题是在这里:

<select multiple="multiple" id="multiselect" name="landings[]" {{ ($post->global == "1") ? "disabled='disabled'" : '' }}> 

但如果这行不通,我该如何设置我的选择框来禁用的初始状态/启用基于我的复选框的值?

这里是一个小提琴:https://jsfiddle.net/o95nhfaw/1/

+0

而不是'disabled'使其成为'readonly'。 'disabled'输入不会提交数据。 –

回答

0

我想通了。我只是添加了一行JS给我的if语句删除禁用的属性,如果复选框被从初始值变化:

$("#toggle").click(function() { 
    if ($(this).is(":checked")) { 
     $('#multiselect').multipleSelect("disable"); 
    } else { 
     $('#multiselect').multipleSelect("enable"); 
     $('#multiselect').removeAttr('disabled'); 
    } 
    }); 

谢谢!