Проверка валидации через JQuery

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Проверка валидации через JQuery

Сообщение long399 »

Всем привет.

У меня на форме есть depdrop, для которого я в pluginEvents задаю:

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

echo $form->field($modelLocation, 'shelf_id',)->widget(DepDrop::class, [
     'options' => ['id' => 'shelf-id', 'prompt' => 'Не выбрана'],
     'pluginOptions' => [
         'depends' => ['place-id', 'rack-id'],
         'placeholder' => 'Не выбрана',
         'initialize' => $model->isNewRecord ? false : true,
         'url' => Url::to(['/record/shelf']),
         'params' => ['selected_shelf_id'],
     ],
     'pluginEvents' => [
         'depdrop:afterChange' => 'function(event, id, value) {
             // code
         }',
     ],
]);
Мне нужно в js-коде как-то проверить валидацию этого контрола. Что-то вроде этого:

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

'depdrop:afterChange' => 'function(event, id, value) {
    if(this.valid()) {
        //
    }
}',
Подскажите как это можно сделать?
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Проверка валидации через JQuery

Сообщение masson »

А на сервере почему не валидируется? Валидируй там и возвращай только валидный ответ или сообщение об ошибках
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Re: Проверка валидации через JQuery

Сообщение long399 »

masson писал(а): 2021.04.01, 13:35 А на сервере почему не валидируется? Валидируй там и возвращай только валидный ответ или сообщение об ошибках
На сервере валидируется, но мне это надо сделать именно на клиенте. Если валидация провалена, мне нужно будет сделать некоторые другие контролы неактивными (disabled).

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

if(!this.valid()) {
    document.getElementById("some_id").disabled = true;
}
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Re: Проверка валидации через JQuery

Сообщение long399 »

Пробовал сделать следующим образом, но не получается.

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

'depdrop:afterChange' => 'function(event, id, value) {
    some_control = document.getElementById("some_id");
    if (this.disabled == false) {
        some_control.disabled = false;
    } else {
        some_control.disabled = this.validity.valid;
    }
}',
Изначально данный DepDrop неактивен, пока не выбраны опции в родительских элементах DepDrop. Пока он остается неактивен, мне надо оставлять неактивным текстовое поле some_control. С этим проблем нет, это работает.

Когда же DepDrop становится активным, он сразу не проходит валидацию required, т.к. изначально выбрана строчка placeholder ("не выбрано"). Т.к. валидация не пройдена, мне надо оставить неактивным текстовое поле, но js-код не отрабатывает (который в else). some_control, который я хочу сделать неактивным пока не пройдена валидация DepDrop становится доступным для манипуляций.
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Проверка валидации через JQuery

Сообщение masson »

Либо я чего-то не понимаю, либо событие depdrop:afterChange вообще пользовать не надо. Пользуй обычный JQuery change, если dropdown неактивен или его значение ="не выбрано" - то текстовое поле блокируй, иначе активируй.
У DepDrop вообще нет такого понятия как "валидация". Если данные в него улеглись - значит он валиден, независимо от того какая строчка выбрана.
Ответить