如何使用CodeIgniter表单验证库通过AJAX验证空复选框并显示消息?

鲍巴·费特

使用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);
        }
好奇心

未定义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);
        }
    }

让我知道结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章