如何为yii2中的某些字段打开\ off前端表单验证?

时间:2015-03-04 14:57:14

标签: jquery validation yii2

我在yii2视图中遇到了困难的形式,其中一些字段显示或隐藏。它根据用户字段选择决定,在表单中选择选项。我用自定义jquery文件编写这个前端逻辑。一切都好。但是当我提交表单时 - 隐藏的字段保持不进行验证,没有任何事情发生。如果字段是hiiden并且打开它,当字段可见时,我可以杀死所有的验证吗?

6 个答案:

答案 0 :(得分:24)

$form->field($model, 'youAttribute', ['enableClientValidation' => false])->textInput();

ActiveField类有一个属性enableClientValidation,如果要在某些字段中禁用clientValidation,可以将此属性设置为false

答案 1 :(得分:17)

禁用客户端验证。像这样开始你的活动表格。

ActiveForm::begin(['enableClientValidation'=>false]);

答案 2 :(得分:10)

您可以使用以下代码设置有效字段:(完全不是active recordactivefield

$activeField = $form->field($model, 'someField');
$activeField->enableClientValidation=false;
$activeField ->enableAjaxValidation=false;

答案 3 :(得分:8)

您可以尝试为未设置的属性设置默认值:

[
  // set "username" and "email" as null if they are empty
  [['username', 'email'], 'default'],

  // set "level" to be 1 if it is empty
  ['level', 'default', 'value' => 1],
]

more info here

在定义验证器时,您还可以使用条件客户端验证"whenClient"选项:

从手册:

  

如果您还需要支持客户端条件验证,那么   应该配置带有字符串的whenClient属性   表示返回值确定的JavaScript函数   是否适用规则。例如,

[
    ['state', 'required', 'when' => function ($model) {
        return $model->country == 'USA';
    }, 'whenClient' => "function (attribute, value) {
        return $('#country').val() == 'USA';
    }"],
]

答案 4 :(得分:1)

从验证中删除字段:

$('#yourFormID').yiiActiveForm('remove', 'yourinputID');

将字段添加到验证列表:

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

并且不要忘记模型中的条件验证。 More info

答案 5 :(得分:0)

对于您的表单,使用whenClient:

['name', 'required', 'when' => {serverSide Condition),
            'whenClient' => "ut_utils.isAttributeVisible",
        ],
        ['name', 'string', 'min' => 2, 'max' => 28],
        ['name', 'trim'],

在ut_utils(JS)中:

/**
     * Useful for FE validation (whenClient) to validate only if visible (ie valid input)
     *
     * @param attribute  Obj containing all sorts of info about attr including container name :-)
     * @param value
     */
    isAttributeVisible: function (attribute, value) {
        return $(attribute.container).is(':visible');
    },

您还需要添加“何时”来验证服务器端,您也可以在此处添加特定的逻辑,或者使用方案从验证中排除属性...