Yii2 скрыть поле формы при обмене радиосигналами

#javascript #yii2 #hide #onchange

#javascript #yii2 #скрыть #при обмене

Вопрос:

У меня есть radioList с 2 значениями, 1 и 2. Я хотел бы скрыть, textInput если для радиосигнала установлено значение 2. Я пытался:

 $script = <<< JS

$(document).ready(function () {
    if(document.getElementById('radio').val() == '2' ) {
        document.getElementById('textInput').style.display = 'none';
        document.getElementById('textInput').hide();
    } else {
        document.getElementById('textInput').show();
    }
});

JS;
$this->registerJs($script);

echo $form->field($model, 'radio')->radioList(['1' => '1', '2' => '2'], ['id' => 'radio']);
echo $form->field($model, 'textInput')->textInput(['id' => 'textInput']);
  

Есть идеи?

Комментарии:

1. Покажите свой html, пожалуйста

2. Какой html вы имеете в виду?

Ответ №1:

Многочисленные проблемы с вашим кодом

  • Вы нигде не загружаете / не регистрируете скрипт с помощью $this->registerJs($script,yiiwebView::POS_READY) .
  • Не существует никакого метода с таким именем, .val() но .value при использовании javascript document.getElementById() .
  • В javascript нет никакого метода .show() и .hide()
  • Тогда, даже если бы вы выполнили вышеуказанные шаги, это все равно не сработало бы, потому что вы не привязываете какое-либо событие к радиовходам, ваш скрипт — это просто встроенный скрипт, который будет вызываться при загрузке страницы.
  • Идентификатор, radio который вы указываете в, radioList будет id идентификатором контейнера, в котором находятся все входные данные списка радиосвязей.
  • И вам нужно скрыть полный контейнер входных данных, а не только входные данные, чтобы метка также была скрыта и отображалась вместе с входными данными.

Поскольку вы использовали тег javascript, который я использую addEventListner для привязки события, смотрите приведенный ниже код и добавляйте его в верхнюю часть вашего представления.

 $script = <<< JS
document.querySelectorAll("#radio input[type='radio']").forEach(function(element){
    element.addEventListener('click',function(){
        if(this.value == '2' ) {
            document.querySelector('#textInput').parentElement.style.display = 'none';
        } else {
            document.querySelector('#textInput').parentElement.style.display = 'block';
        }
    });
});
JS;
$this->registerJs($script, yiiwebView::POS_READY);
  

Комментарии:

1. Извините, я как-то забыл добавить registerJs сюда, но это было там.

2. @user2511599 все в порядке, вы можете отметить остальные пункты и добавить скрипт в начало своей страницы, и он будет работать правильно