我想在不提交表单的情况下验证ActiveForm的内容 我目前正在使用以下代码
在javascript中执行此操作var form = $(this).closest('tr').find('form');
var data = form.serialize();
d = form.data("yiiActiveForm");
$.each(d.attributes, function() {
this.status = 3;
});
form.yiiActiveForm("validate");
if (form.find(".has-error").length) {
return false;
}
此工作正常,错误显示在屏幕上 验证在ActiveRecord的rules()函数中定义的预定义活动表单验证器时。
array_push($r, ['tel_no', 'required', 'message' => 'input telephone no.']);
array_push($r, ['mail_address', 'email', 'message' => 'input correct email']);
但不适用于自定义验证器,如下所示
array_push($r, ['card_no', 'validateCardNo']);
public function validateCardNo($attribute, $params) {
if (!preg_match('/^[A-Za-z0-9-\/]+$/D', $this->$attribute)) {
$this->addError('card_no', 'input correct card no');
}
}
我是否需要在javascript上使用某些内容才能触发自定义验证器?任何帮助,将不胜感激。 提前致谢
答案 0 :(得分:1)
要创建支持客户端验证的验证器,您应该实现yii \ validators \ Validator :: clientValidateAttribute()方法,该方法返回一段在客户端执行验证的JavaScript代码。
请参阅文档:http://www.yiiframework.com/doc-2.0/guide-input-validation.html#implementing-client-side-validation
答案 1 :(得分:0)
作为参考,我可以通过调用validateAttribute来调用自定义验证器。
form.yiiActiveForm("validate");
form.yiiActiveForm("validateAttribute", "user-card_no");
if (form.find(".has-error").length) {
return false;
}
并在视图端将enableAjaxValidation设置为true。
<?php $form = ActiveForm::begin(['id' => 'owner_form', 'enableAjaxValidation' => true]); ?>