После создания формы Ajax не проходит валидация?

Добавляю форму при помощи Ajax но она не проходит валидацию на клиенте. Там присутствует форма но исходя из выбора пользователя часть формы меняется. Следующим образом отправляется ajax запрос указывается какой выбор пользователь сделал, меняется форма и тем же скриптом в случае получения ответа меняется часть формы собственно вот так записано в js

$('#deliveryForm .radio-tab input').change(function () {
            var datas = $(this).val();
            $.ajax({
                method: "POST",
                url: "/cart",
                data: 'delivery='+datas,
                success: function (data) {
                    $.pjax.reload({container: "#pjax-form-cart"});
                    $('#deliveryForm .radio-tabs .tab-pane').removeClass('active');
                    $('#deliveryForm .radio-tabs .tab-pane.delivery2').addClass('active');
                }
            })
    
        });


вот так в контролере обрабатываю выбор пользователя

public function actionIndex(){
          if(Yii::$app->request->isAjax &&isset($post['delivery']))
                $this->userCartChoice($post['delivery']);
                 $choice= UserCartChoice::find()->one();
           ...
    }
     private function userCartChoice($choise){
            $userChoise=UserCartChoice::find()->one();
            if(!$userChoise)
                $userChoise= new UserCartChoice();
            $userChoise->choice=$choise;
            $userChoise->save();
        }


ну и соответственно весь заменяемый блок

<?php Pjax::begin(['id' => 'pjax-form-cart']); ?>
        <div class="tab-content">
            <div class="tab-pane delivery1 <?= ($userChoice==0)?'active':''?> ">
                <?php  if($userChoice==0){ echo PickUp::widget(['form'=>$form]); } ?>
            </div>
            <div class="tab-pane delivery2 <?= ($userChoice==1)?'active':''?>">
                <?php  if($userChoice==1){ echo DeliveryPiter::widget(['form'=>$form]); } ?>
            </div>
        </div>
        <?php Pjax::end(); ?>


И когда я создаю форму она не валидируется. На клиенте. Если нажимаю кнопку отправить. Ошибки валидации показывается.
Я так понимаю надо инициализировать заново проверку. Вопрос что надо инициализировать
  • Вопрос задан
  • 436 просмотров
Решения вопроса 1
Sergalas
@Sergalas Автор вопроса
Учусь
В общем я решил вопрос следующим образом
<?php $this->registerJs("
    $('#pjax-form-cart').on('pjax:end',function(){
        $('#deliveryForm .required input').on('blur',function(){
            var id= $(this).attr('id');
            $('#deliveryForm').yiiActiveForm('validateAttribute', id);
        })  
    });", yii\web\View::POS_READY); ?>

в каждой вьюхе виджета
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
proudmore
@proudmore
Я правильно вас понял, что вы решили вместо
<?php $form = ActiveForm::begin([
    'action'=>'cart/checkout', 
    'method'=>'post',
    'id'=>'deliveryForm',
    'enableAjaxValidation' => true
 ]) ?>


Решили в саму форму впихнуть Pjax-container, который перезагружает html внутри себя?
Ответ написан
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Это видео Вам поможет.
Pjax тут совсем не нужен.
Вам в параметрах надо указать, что нужна ajax валидация, сделать действие для этой валидации и указать адрес, по которому будет проходить валидация.
Приблизительно вот так:
$form = ActiveForm::begin([
      'id' => 'testForm',
      'enableAjaxValidation' => true,
      //'enableClientValidation' => false,
      'validationUrl' => ['dynamic/ajax-validation']
  ]);

// и действие в контролере
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
    Yii::$app->response->format = Response::FORMAT_JSON;
    return ActiveForm::validate($model);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы