2016-03-30 45 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)