我正在尝试找到一种方法来对复选框和输入字段进行分组,这样,如果选中了复选框,用户只能将数据输入到字段中。我目前有一个生成的复选框字段(表中的值)和相应的输入字段。
我目前的解决方案是:
@foreach($labourTypes as $id => $name)
<div class="checkbox">
<label>
{!! Form::checkbox("labour_types[]", $id) !!} {{$name}}
</label>
{!! Form::input('number', 'required_labour_type_hours[]', '') !!}
</div>
@endforeach
输入数据库:
$required_labour_hours = array_filter($required_labour_hours);
$required_labour_hours = array_values($required_labour_hours);
foreach(array_combine($labour_types, $required_labour_hours) as $labour_type => $hours) {
DB::table('required_labour_type')->insert([
'id' => null,
'labour_type_id' => $labour_type,
'required_labour_type_hours' => $hours
]);
}
这是我当前的解决方法,但如果用户填写的输入字段没有勾选相应的复选框,则不会阻止(并且会导致插入)。
这就是目前的样子:
http://i.imgur.com/sVhnFMc.png
我正在尝试找到一种方法来实现它,所以只有在选中相应的复选框时才允许输入,或者在插入之前将它们分组到一个数组中,并在输入之前删除那些没有选中复选框的输入?我是laravel和php的新手,所以我很难想出一个万无一失的解决方法。
感谢。
答案 0 :(得分:2)
我会在前端使用jQuery来控制用户的输入。我还要验证服务器端的数据是否安全。使用jQuery,如果未选中复选框,您可以轻松地使输入字段只读,并根据需要进行更新。此代码假定输入字段是type="text"
之一。您可以轻松更新以支持多种输入类型。
jQuery(document).ready(function($) {
$('.checkbox').each(function() {
var cbox = $(this).find('input[type=checkbox]'),
inp = $(this).find('input[type=text]');
cbox.on('change', function(evt) {
if( $(this).is(':checked') )
inp.removeAttr('readonly');
else
inp.attr('readonly', true);
});
//init
if( ! cbox.is(':checked') )
inp.attr('readonly', true);
});
});
在服务器端,这就像检查复选框是否存在一样简单。如果未选中复选框,则在表单提交期间不会将其发送到服务器。所以使用类似的东西:
if( isset($_POST['some_checkbox']) ) {
//sanitize, validate, and save the value of the corresponding text field
} // else do nothing with this text field