2016-11-07 6 views
0

私のフォームがあります:Yii2実行JS-スクリプト

$form = ActiveForm::begin([ 
     'id' => 'user-create-form', 
     'enableAjaxValidation' => true, 
     'enableClientValidation' => false, 
     'validationUrl' => Url::toRoute(Yii::$app->controller->id . '/validation'), 
     'validateOnType' => true, 
    ]); 

JS-スクリプトは、このフォームに登録して.keyup()イベントに関するいくつかのルールに従って、英語の音訳にロシアを行っています。子音の結果がsamnameフィールドに追加されます。

あり、検証ルールはUserCreateFormモデルである:

public function rules() 
    { 
     return [ 
     [['samname'], 'validateUserExist'], 
     ]; 
    } 

    public function validateUserExist() 
    { 
     $check = Yii::$app->CustomComponents->checkUserExist($this->samname); 
     if ($check) { 
      $errorMessage = 'User exists: ' . $check; 
      $this->addError('samname', $errorMessage); 
     } 
    } 

機能作成した名前の既存のcheckUserExist()チェックし、一致する場合にエラーを返します。

あり、コントローラのアクションは次のとおりです。...それは素晴らしい、検証が行われ、一致した場合はエラーを返し作品

public function actionValidation() 
    { 
     $model = new UserCreateForm(); 

     if (\Yii::$app->request->isAjax && $model->load(\Yii::$app->request->post())) { 
      \Yii::$app->response->format = Response::FORMAT_JSON; 
      echo json_encode(ActiveForm::validate($model)); 
      \Yii::$app->end(); 
     } 
    } 

しかし!

JSスクリプトが再度実行され、エラー時に名前に次の文字が追加される必要があります(JSスクリプトはこの機能を提供します)。バリデータがエラーを返した後にJSスクリプトを再実行するには?

+0

は、私はそれはあなたを助けることができると思う:https://yii2-cookbook.readthedocs.io/forms-activeform-js/ – yafater

+0

@yafaterは、私が使用する必要があるとどのように正確に使用しているものイベントを理解していませんそれ。あなたは私を助けてくれますか? – rsnd

+0

どうすれば教えてあげますか? – yafater

答えて

0

@yafater助けてくれてありがとう!私は解決策を見つける。

$('form').on('afterValidateAttribute', function (event, attribute, message) { 
     if (attribute.name === 'samname') 
     { 
      $.ajax({ 
       url: "url-to-action", 
       type: "POST", 
       dataType: "json", 
       data: $(this).serialize(), 
       success: function(response) { 
        if (typeof(response["form-samname"]) != "undefined" && response["form-samname"] !== null) { 
         // code here 
        } 
       }, 
      }); 
      return false; 
     } 
    }); 
+0

申し訳ありませんが、私は解決に満足しています。 – yafater

関連する問題