yii2 ajax验证表格

时间:2019-07-13 15:54:26

标签: php yii2 jquery-select2

我有一个用于表格输入的表单母版详细信息,并且具有enabledAjaxValidation = true

到目前为止,该表单可以验证所有规则,并在提交或更改任何控件的任何值(onchange事件)时显示错误消息。当我使用ajax将控件添加到表单时,问题就来了,后者的行为不像原始的那样,它们不显示错误消息。

enter image description here

使用按钮提交时相同 我认为

2 个答案:

答案 0 :(得分:1)

您需要使用yiiActiveForm.add()函数将新创建/添加的字段手动添加到验证中,以用于任何动态创建的输入。

当您单击按钮并通过ajax向表单添加新输入时,您尚未添加当前正在使用的代码。因此,您需要做的就是在收到响应并将输入追加到表单后,只需使用以下代码添加新输入即可。

注意:相应地更改表单和字段属性

$('#form-id').yiiActiveForm('add', {
    id: 'input-id',
    name: 'input-name',
    container: '.field-input',
    input: '#input-id',
    error: '.help-block',
    validate:  function (attribute, value, messages, deferred, $form) {
        yii.validation.required(value, messages, {message: "Validation Message Here"});
    }
});

详细了解activeform valiadation js

更新

如果您不希望为每个输入手动添加验证功能,并且具有表格输入,则可以访问任何已创建的类似字段并从中绑定验证功能。

例如,在上面的示例中,如果name字段是表格形式的并且属于模型Contact,并且您已经具有以#contact-0-name格式填充的名称字段,则可以使用yiActiveForm.find()函数用于访问该字段的属性并分配现有的验证。参见下面的示例

var fieldAttributes = $("#form-id").yiiActiveForm("find", 'contact-0-name');
$('#form-id').yiiActiveForm('add', {
    id: 'contact-1-name',
    name: '[1][name]',
    container: '.field-name',
    input: '#contact-1-name',
    error: '.help-block',
    validate:  fieldAttributes.validate
});

答案 1 :(得分:1)

使用类似以下代码的东西

error: function(jqXHR,textStatus,errorThrown) {
                stopLoader('.modal-content');
                $('.csv_errors').show();
                if(jqXHR.status==422){      
                    var responseText = $.parseJSON(jqXHR.responseText);
                    $.each(responseText.errors,function(key,value){
                        $('.csv_error ul').append('<li>'+value+'</li>');
                    });
                }else{
                    var responseText = $.parseJSON(jqXHR.responseText);
                    $('.csv_error ul').append('<li>'+responseText.message+'</li>');
                }
            }