【问题标题】:Codeigniter ajax form validation for radio button not working单选按钮的Codeigniter ajax表单验证不起作用
【发布时间】:2017-04-22 18:34:06
【问题描述】:

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

请帮忙...

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>

阿贾克斯

<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);
    }

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

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

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

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

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

    您正在使用 $_POST 数组,但它没有 cars 键初始化

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

    <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>
    

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

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

    【讨论】:

    • 谢谢@RobertWillis
    猜你喜欢
    • 2020-02-02
    • 2012-06-22
    • 2017-03-16
    • 1970-01-01
    • 2020-04-12
    • 2017-07-21
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多