使用ajax调用呈现表单时,客户端验证在Yii2中不起作用

时间:2015-04-12 17:26:14

标签: javascript php jquery ajax yii2

使用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加载了上面的表单,问题是客户端验证无法使用它。如果我在窗口加载时加载表单内容,它可以正常工作。

2 个答案:

答案 0 :(得分:4)

好的,我找到解决方案,我必须使用renderAjax来获取表单html,或者如果我使用beginpage <则必须添加beginendrenderPartial函数/ 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,以防止在其他视图中加载此表单时可能发生冲突。