Отображение скрытых полей взависимости от выбора ActiveForm

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
uchet
Сообщения: 47
Зарегистрирован: 2017.11.29, 21:42
Откуда: Беларусь, Гродно

Отображение скрытых полей взависимости от выбора ActiveForm

Сообщение uchet »

Подскажите как реализовать
Имеем Active Form
1 таблица БД
Некоторые поля зависимы от других.
т.е. к примеру выбрали в выпадающем списке значение 1, то отобразилось скрытое поле.
Только начал учить.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Отображение скрытых полей взависимости от выбора ActiveForm

Сообщение maleks »

простой скрипт на jquery
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
uchet
Сообщения: 47
Зарегистрирован: 2017.11.29, 21:42
Откуда: Беларусь, Гродно

Re: Отображение скрытых полей взависимости от выбора ActiveForm

Сообщение uchet »

Т.е. в activeform делаем поле hidden

И потом на каждое зависимое поле вешаем скрипт с условием ?
Только начал учить.
Аватара пользователя
uchet
Сообщения: 47
Зарегистрирован: 2017.11.29, 21:42
Откуда: Беларусь, Гродно

Re: Отображение скрытых полей взависимости от выбора ActiveForm

Сообщение uchet »

Кликаю на uplate в gridview
Открывается модальное окно, туда подгружается ActiveForm из form.php
в скрипте пытаюсь получить value инпута, но не находит.
В DOM нету данных из модального окна

Как быть?
Только начал учить.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Отображение скрытых полей взависимости от выбора ActiveForm

Сообщение andku83 »

код в студию! (телепаты в отпусках)
Аватара пользователя
uchet
Сообщения: 47
Зарегистрирован: 2017.11.29, 21:42
Откуда: Беларусь, Гродно

Re: Отображение скрытых полей взависимости от выбора ActiveForm

Сообщение uchet »

в index.php

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

<div class="modal modal-center" id="modal-info" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"
     aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">Внесите данные</h5>
                <button type="button" class="close" data-dismiss="modal">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body"></div>
        </div>
    </div>
</div>
в form.php который загружается в modal body

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

<div class="token-form">

        <?php Pjax::begin();

        $form = ActiveForm::begin([
            'id' => 'modalUpdate',
            'enableAjaxValidation' => true
        ]); ?>

        <?= $form->field($model, 'login')->textInput(['maxlength' => true]) ?>

        <?= $form->field($model, 'password')->passwordInput(['maxlength' => true]) ?>

        <?= $form->field($model, 'token')->textInput(['maxlength' => true]) ?>

        <div class="form-group">
            <?= Html::submitButton('Сохранить', ['class' => 'btn btn-bold btn-pure btn-primary']) ?>
            <?= Html::Button('Закрыть', [
                'type' => 'button',
                'class' => 'btn btn-bold btn-pure btn-secondary',
                'data-dismiss' => 'modal'
            ]) ?>
        </div>

        <?php ActiveForm::end();
        Pjax::end(); ?>


    </div>
скрипт в подключенном my.js

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

$(document).ready(function () {
    $('.update').on('click', function () {
        var data = $(this).data();

        $('#modal-info').modal('show');
        $('#modal-info').find('.modal-body').load(data.path + '?id=' + data.id);
   
         var itemsToken = $('#token-token').attr('value');

         if (itemsToken != '') {
            alert(itemsToken);
        } else {
          alert('error');
        }
     })
});
Модальное окно открывается, форма в нее загружается, отображается
Но скрипт не находит value т.к. нету такого селектора.
Он должен появится после подгрузки модального окна, но в dom не появляется, даже после подгрузки окна
Только начал учить.
Аватара пользователя
uchet
Сообщения: 47
Зарегистрирован: 2017.11.29, 21:42
Откуда: Беларусь, Гродно

Re: Отображение скрытых полей взависимости от выбора ActiveForm

Сообщение uchet »

Разобрался.
В методе load нужно использовать функцию, которая выполняется после загрузки form.php

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

$(document).ready(function () {
    $('.update').on('click', function () {
        var data = $(this).data();

        $('#modal-info').modal('show');
        $('#modal-info').find('.modal-body').load(data.path + '?id=' + data.id, function () {
               var itemsToken = $('#token-token').attr('value');

                if (itemsToken != '') {
                    alert(itemsToken);
                } else {
                    alert('d');
                }
        });
    })
});
Функция обратного вызова

Если функция "complete" задана, то она выполняется после обработки и вставки HTML. Эта функция будет вызвана для каждого элемента в коллекции jQuery и this внутри нее будет указывать на DOM элемент.
https://jquery-docs.ru/load/
Только начал учить.
Ответить