在我的表单上,每行都有提交按钮,您需要先检查复选框,然后才能将其删除,否则应该通过错误。
问题:我的复选框是in_array,但是如果我没有选中该框,然后按提交,则不会通过codeigniter form_validation错误。我使用了$this->form_validation->set_rules('selected[]', 'Selected', 'required');
但错误没有显示出来。
使form_validation错误起作用的最佳解决方案是什么?
查看
<?php echo form_open('admin/design/layout/delete'); ?>
<?php echo validation_errors('<div class="alert alert-danger">', '</div>'); ?>
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<td style="width: 1px;" class="text-center">
<input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" />
</td>
<td>Layout Name</td>
<td class="text-right">Action</td>
</tr>
</thead>
<tbody>
<?php if ($layouts) { ?>
<?php foreach ($layouts as $layout) { ?>
<tr>
<td class="text-center"><?php if (in_array($layout['layout_id'], $selected)) { ?>
<input type="checkbox" name="selected[]" value="<?php echo $layout['layout_id']; ?>" checked="checked" />
<?php } else { ?>
<input type="checkbox" name="selected[]" value="<?php echo $layout['layout_id']; ?>" />
<?php } ?>
</td>
<td><?php echo $layout['name']; ?></td>
<td class="text-right">
<button type="submit" class="btn btn-danger">Delete</button>
<a href="<?php echo $layout['edit']; ?>" class="btn btn-primary">Edit</a>
</td>
</tr>
<?php } ?>
<?php } else { ?>
<?php } ?>
</tbody>
</table>
</div>
</div>
<?php echo form_close(); ?>
控制器功能
public function delete() {
$this->load->library('form_validation');
$this->form_validation->set_rules('selected[]', 'Selected', 'required');
if ($this->form_validation->run() == FALSE) {
echo "Error";
$this->get_list();
} else {
$selected_post = $this->input->post('selected');
if (isset($selected_post)) {
foreach ($selected_post as $layout_id) {
}
echo "Deleted $layout_id";
$this->get_list();
}
}
}
答案 0 :(得分:1)
不会对每个字段进行验证。规则中的selected[]
选择器意味着,当您提交表单时,它应该至少是一个选定的项目。现在您已经提交了按钮,这些按钮可以独立提交表单,无论它们在dom中的哪个位置,以及选择了哪些复选框。
目前它是一样的,因为你最后会有一个提交按钮。
我会添加一些javascript,并设置如果未选中该复选框,则可以禁用该字段:
<script>
$(function() {
$('input:checkbox').on('change', function() {
if($(this).is(':checked')) {
$(this).closest('tr').find('button:submit').prop('disabled', false);
}
else {
$(this).closest('tr').find('button:submit').prop('disabled', true);
}
})
})
</script>
并在提交按钮中添加disabled
:
<button type="submit" class="btn btn-danger" disabled>Delete</button>
这不是服务器端验证,但您可以实现以防止按下下一个未选中的按钮复选框。