Js валидация формы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
edvardpotter
Сообщения: 27
Зарегистрирован: 2017.08.19, 21:40

Js валидация формы

Сообщение edvardpotter »

Здравствуйте! Как вручную проверить форму и узнать имеет ли она ошибки или нет?
Есть отправка ajax запроса, но перед его отправкой нужно провести валидацию форму.
Нашел несколько вариантов, но честно не пойму как их использовать.
edvardpotter
Сообщения: 27
Зарегистрирован: 2017.08.19, 21:40

Re: Js валидация формы

Сообщение edvardpotter »

Каким образом можно узнать прошла валидация успешна? Если вызвать валидацию, получаю такое сообщение:

Код: Выделить всё

Uncaught TypeError: Cannot set property 'submitting' of undefined
    at jQuery.fn.init.validate (yii.activeForm.js:302)
    at jQuery.fn.init.$.fn.yiiActiveForm (yii.activeForm.js:16)
    at HTMLButtonElement.<anonymous> (index?gameId=3&LobbySearchForm[min_rank]=&LobbySearchForm[max_rank]=&LobbySearchForm[language]=:951)
    at HTMLButtonElement.dispatch (jquery.js:5206)
    at HTMLButtonElement.elemData.handle (jquery.js:5014)
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Js валидация формы

Сообщение SiZE »

Покажите свой код
edvardpotter
Сообщения: 27
Зарегистрирован: 2017.08.19, 21:40

Re: Js валидация формы

Сообщение edvardpotter »

Код: Выделить всё

$(document).ready(function() {    
    var form = $('#search-form');    
        $('.has-spinner').click(function () {            
            form.yiiActiveForm('validate', true);            
        });        
});
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Js валидация формы

Сообщение SiZE »

А форма как в представлении прописана?
edvardpotter
Сообщения: 27
Зарегистрирован: 2017.08.19, 21:40

Re: Js валидация формы

Сообщение edvardpotter »

Код: Выделить всё

<?php $form = ActiveForm::begin([
            'id' => 'search_form',
            'action' => ['index', 'gameId' => $game->id],
            'method' => 'get',
        ]); ?>

        <?= $form->field($model, 'min_rank')->dropDownList(ArrayHelper::map($game->ranks, 'id', 'name'), [
            'prompt' => Yii::t('app', 'Select')
        ]) ?>
        <?= $form->field($model, 'max_rank')->dropDownList(ArrayHelper::map($game->ranks, 'id', 'name'), [
            'prompt' => Yii::t('app', 'Select')
        ]) ?>
        <?= $form->field($model, 'language')->dropDownList(ArrayHelper::map(\app\models\Language::find()->all(), 'id', 'name'), [
            'prompt' => Yii::t('app', 'Select')
        ]) ?>
        <div class="form-group">
            <?= Html::submitButton(Yii::t('app', 'Search'), ['class' => 'btn btn-primary has-spinner']) ?>
            <?= Html::resetButton(Yii::t('app', 'Stop'), ['class' => 'btn btn-default', 'id' => 'stop']) ?>
        </div>


        <?php ActiveForm::end(); ?>
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Js валидация формы

Сообщение SiZE »

Код: Выделить всё

var form = $('#search-form');

Код: Выделить всё

'id' => 'search_form'
edvardpotter
Сообщения: 27
Зарегистрирован: 2017.08.19, 21:40

Re: Js валидация формы

Сообщение edvardpotter »

SiZE писал(а): 2018.02.16, 08:32

Код: Выделить всё

var form = $('#search-form');

Код: Выделить всё

'id' => 'search_form'
Да это уже исправил, только все равно не ясно, как получить результат валидации?
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Js валидация формы

Сообщение SiZE »

edvardpotter писал(а): 2018.02.16, 11:13 как получить результат валидации?
подписаться на событие afterValidate
pun200648
Сообщения: 1
Зарегистрирован: 2022.10.04, 19:11

Re: Js валидация формы

Сообщение pun200648 »

Понимаю, что пост старый.
Но сам столкнулся с данной задачей.
Она была решена в коммите https://github.com/ptolomaues/yii2/comm ... d4b8404d24.

Вкратце.

Код: Выделить всё

form = $('#someForm');
form.data('yiiActiveForm').validate_only = true;
form.one('afterValidate', afterValidateEvent);
form.yiiActiveForm('validate', true); //run validation

function afterValidateEvent() {
    if ($('#someForm').find('.has-error').length) {
       // Validation failed
    }
     // Validation Succeed
}
В этом случае сабмит формы не происходит, а результат можно забрать с события afterValidate.
Ответить