2016-03-30 93 views
2

我想通過jQuery在視圖頁面中更改場景。 我的表單中有一個複選框,我希望在複選框中需要輸入框。在窗體Yii2中更改場景

我的規則:

public function rules() { 
     return [ 
       . 
       . 
       . 
       ['pass' , 'required', 'on'=> 'checked'] 
     ] 
} 

我的看法頁:

<?=$form->field($model, 'check')->checkbox()?> 
<?=$form->field($model, 'Pass')->textInput(['maxlength' => 20])?> 
+0

做任何檢驗之前我刪除了答案,因爲沒有相關的jQuery .validatio而是使用yii2場景......。如果你想驗證客戶端可能是更好的ajax驗證o本地jquery驗證無情景... – scaisEdge

回答

4

嘗試設置您的規則是這樣的:

public function rules() { 
    $checkBoxID = Html::getInputId($this, 'check'); 

    return [ 
     /* other rules */ 
     ['pass' , 'required', 
      'when' => function($model) { 
       return $model->check; 
      }, 
      'whenClient'=> "function(attribute, value){ 
       return $('#{$checkBoxID}').prop('checked'); 
      }", 
      'on' => 'checked' 
     ], 
    ]; 
} 

閱讀conditional validationwhenClient validator property。還要考慮爲您的場景命名更多的信息,例如出於其目的,如'on' => 'sign-up'或​​。當您需要某些特定規則應用於特定情況時,方案很有用,但您需要明確指定此方案。或者當您實例化一個模型

$model = new MyModel(); 
$model->scenario = 'sign-up'; 

,並通過它變成一個視圖,或後$model->load($data)