使用CodeIgniter表单验证库未选中复选框时显示表单错误消息。
当前,仅当选中复选框时才显示表单错误消息。
这是AJAX呼叫:
$('#add_user').on('submit', function(e) {
e.preventDefault();
$.ajax({
url : $(this).attr('action'),
method : "post",
data: $(this).serialize(),
dataType: "json",
success: function(result) {
if(result.success == true) {
alert('Success');
} else {
$.each(result.errors, function(key, value) {
var error = $('#' + key);
error.closest('div.form-group')
.find('.error').remove();
error.after(value);
});
}
}
});
});
这是PHP控制器:
$this->form_validation->set_rules('agreement', 'Agreement', 'callback_agreement_checkbox');
if($this->form_validation->run()) {
$data['success'] = true;
$this->load->view('Success');
} else {
foreach($this->input->post() as $key => $value) {
$data['errors'][$key] = form_error($key);
}
echo json_encode($data);
}
public function agreement_checkbox() {
if (empty($this->input->post('agreement'))) {
return FALSE;
} else {
$error = 'Please accept TOS';
$this->form_validation->set_message('agreement_checkbox', $error);
return TRUE;
}
}
在未选中复选框的情况下提交表单时,不会显示错误消息(但应该显示)。仅在选中复选框且不正确时显示。
编辑:
为了支持混合不同的输入数据,我做了一些修改:
$this->form_validation->set_rules('first_name', 'First name', 'trim|required');
$this->form_validation->set_rules('last_name', 'Last name', 'trim|required');
$this->form_validation->set_rules('email', 'E-mail', 'trim|required');
$this->form_validation->set_rules('agreement', 'Agreement', 'required');
if($this->form_validation->run()) {
$data['success'] = true;
$this->load->view('Success');
} else {
foreach($this->input->post() as $key => $value) {
$data['errors'][$key] = form_error($key);
}
if (empty($this->input->post('agreement'))) {
$data['errors']['agreement'] = form_error('agreement', '<div id="agreement_error">', '</div>');
}
echo json_encode($data);
}
答案 0 :(得分:0)
Codeigniter的回调函数未定义$this->input->post()
。我建议您使用required
。所以会是这样。
$this->form_validation->set_rules('agreement', 'Agreement', 'required');
它将定义在提交复选框之前是否已选中该复选框。然后也更改此代码。
if($this->form_validation->run()) {
if(! empty($this->input->post('agreement))){
$data['success'] = "It was checked";
}else{
$data['error'] = validation_errors();
}
echo json_encode($data);
}
您的ajax:
success: function(result) {
if(result.success) {
console.log(result.success);
} else {
console.log(result.error);
}
}
让我知道结果。