使用ajax呈现的表单:
<?php $form = ActiveForm::begin(['id' => 'que',
'enableClientValidation' => true
]); ?>
<?php echo $form->field($model, 'fk_subject')
->dropDownList(ArrayHelper::map($subjects, 'id_subject', 'name'), [
'class' => 'form-control ng-pristine ng-valid ng-touched',
'ng-model' => 'que.fk_subject',
'prompt' => 'Select subject',
'ng-change' => 'fillTopic(que);'
]); ?>
<?php echo $form->field($model, 'fk_topic')
->dropDownList([], [
'class' => 'form-control ng-pristine ng-valid ng-touched',
'ng-model' => 'que.fk_topic',
'prompt' => 'Select topic',
'ng-change' => 'openAddTopic(que);',
'ng-options' => 'topic.id_subject as topic.name for topic in topics',
]); ?>
<?php echo $form->field($model, 'type')
->dropDownList($questionTypes, [
'class' => 'form-control ng-pristine ng-valid ng-touched',
'prompt' => 'Select question type',
'ng-model' => 'que.type',
'ng-change' => 'addAnswerOptions(que);',
]); ?>
<?php echo Html::submitButton('Save',
['class' => 'btn btn-primary',
'name' => 'Save']) ?>
<?php ActiveForm::end(); ?>
我在yii2中使用ajax加载了上面的表单,问题是客户端验证无法使用它。如果我在窗口加载时加载表单内容,它可以正常工作。
答案 0 :(得分:4)
好的,我找到解决方案,我必须使用renderAjax
来获取表单html,或者如果我使用beginpage
<则必须添加beginend
和renderPartial
函数/ p>
<?php $this->beginPage(); ?>
<?php $this->beginBody(); ?>
// Form and content redenered using ajax
<?php $this->endBody(); ?>
<?php $this->endPage(); ?>
以便yii
可以使用呈现的内容添加客户端验证脚本
答案 1 :(得分:1)
确保在控制器中使用renderAjax()
方法通过ajax加载此表单,这样所需的脚本将在加载时注册。
除此之外,您需要为表单指定唯一ID,以防止在其他视图中加载此表单时可能发生冲突。