#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
при использовании javascriptdocument.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 все в порядке, вы можете отметить остальные пункты и добавить скрипт в начало своей страницы, и он будет работать правильно