Codeigniter ajax表单验证单选按钮不起作用

时间:2017-04-22 18:34:06

标签: php codeigniter

我试图在Codeigniter中使用ajax进行简单的表单验证,它有一个文本字段和3个单选按钮... textfield的表单错误显示错误,但单选按钮的错误没有显示...

请帮助......

HTML页面

<form action="<?php echo base_url('register') ?>" method="POST" id="regID">
        <div class="form-field">
            <input type="radio" name="cars" value="BMW">BMW
            <input type="radio" name="cars" value="Ferrari">Ferrari
            <input type="radio" name="cars" value="Audi">Audi
        </div>
        <div class="form-field">
            <input type="text" name="name" id="name">
        </div>
        <input type="submit" id="submitter">
    </form>

Ajax

<script type="text/javascript">

$("#regID").submit(function(){
        var form = $(this);

        $.ajax({
            url  : form.attr('action'),
            type : form.attr('method'),
            data : form.serialize(),
            dataType : 'json',
            success : function(response){
                if(response.success == true)
                {               
                    alert('DONE');              
                }
                else
                {
                    $.each(response.messages, function(index, value){
                        var element = $('#'+index);                     

                        $(element)  
                        .closest('.form-field')                     
                        .find('.text-danger').remove();                     

                        $(element).after(value);
                    });
                }
            }
        });
        return false;
    });

</script>

控制器

public function register() 
    {
        $this->form_validation->set_rules('name', 'Name', 'required',
            array(
                'required' => 'Name Required',
                )
            );
        $this->form_validation->set_rules('cars', 'Cars', 'required',
            array(
                'required' => 'Cars Required',
                )
            );

        $this->form_validation->set_error_delimiters('<p class="text-danger">* ', '</p>');

        if($this->form_validation->run() == TRUE)
        {
            $validator['success'] = true;                   
        }
        else
        {           
            $validator['success'] = false;
            foreach ($_POST as $key => $value) 
            {
                $validator['messages'][$key] = form_error($key);
            }
        }
        echo json_encode($validator);
    }

当我这样做时,我只能显示文本字段的错误,而不是单选按钮。如果所有单选按钮都未选中,我想运行验证错误....

我该怎么做...请帮忙......

1 个答案:

答案 0 :(得分:0)

我在最后执行了你的代码。我找到的唯一问题是我没有在$ _POST数组中获得汽车键。如果我们没有在数组中获取此键,那么此部分的错误验证如何工作:

else
    {           
        $validator['success'] = false;
        foreach ($_POST as $key => $value) 
        {
            $validator['messages'][$key] = form_error($key);
        }
    }

您正在使用$ _POST数组且它没有汽车键init

解决方案:默认选择任意一个无线电输入。如:

<form action="<?php echo base_url('register') ?>" method="POST" id="regID">
    <div class="form-field">
        <input type="radio" checked="checked" name="cars" value="BMW">BMW
        <input type="radio" name="cars" value="Ferrari">Ferrari
        <input type="radio" name="cars" value="Audi">Audi
    </div>
    <div class="form-field">
        <input type="text" name="name" id="name">
    </div>
    <input type="submit" id="submitter">
</form>

将任何选项设置为默认选项后,您无需检查所需的验证。否则,你可以使用其他验证规则。

如果您遇到任何问题,请告诉我。