2017-11-06 12 views
2

フォームをサブミットせずにActiveFormの内容を確認したかったのです。
私は現在、次のコードForm.yiiActiveForm( "validate")を呼び出すときにActiveRecordカスタムバリデータが実行されない

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

とJavaScriptでこれをやっているこれが正常に動作し、ルールでのActiveRecordの()関数を定義した定義済みのアクティブなフォームのバリデータで検証するときにエラーが画面 に示されています。

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

[enableAjaxValidationプロパティ](http://www.yiiframework.com/doc-2.0/guide-input-validation.html#ajax-validation)を使用する必要があります。 jsを使う必要はありません。 –

答えて

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]); ?> 
関連する問題