2016-11-19 4 views
0

У меня есть DropDownList:YII2 зависимые поля

  • Календарь
  • Последний день
  • ввода текста

И мне нужно:

  • , если пользователь выбирает "календарь" , появится виджет календаря
  • не если «Ввод текста», появляется ввод текста
  • если «Последний день» выбран, ничего появляется

Я нашел много вариантов в Интернете, но они используют AJAX, и, к сожалению, я не могу заставить его работать в моем случае.

Я думаю, что это можно решить с помощью JavaScript.

Вот мой PHP:

<?php 
    $js = 'function Go(){ alert("ok!");}'; 
    $this->registerJs($js, yii\web\View::POS_READY); 
?> 

<?php echo $form->field($model, 'condition')->dropDownList($conditionList, 
[ 
    'id' => 'condition', 
    'class' => 'dependent-input', 
    'onchange' => 'Go()', 
] 
); 
?> 
+0

Вы выразили необходимость, но в чем конкретно заключается ваш вопрос? Вы пробовали писать JavaScript? jQuery звучит как хороший вариант. Для получения помощи в редактировании вашего вопроса см. «[Как задать хороший вопрос]» (http://stackoverflow.com/help/how-to-ask) ». – jacefarm

+0

Да, я пробовал использовать jQwery, но я не мог заставить его работать – AstureS

+1

Если вы разместите свой код jQuery, это поможет другим сотрудничать с вами в поиске решения. – jacefarm

ответ

1

Вы можете использовать JQuery, чтобы выполнить показ и скрытие календаря и ввода текста виджетов.

скомпилированный HTML может выглядеть примерно так:

<select class="hide-and-show" name="show-and-hide"> 
    <option selected disabled>Choose one</option> 
    <option value="calendar">Calendar</option> 
    <option value="text-input">Text Input</option> 
    <option value="last-day">Last Day</option> 
</select> 

<div class="calendar hideable">CALENDAR GOES HERE</div> 
<div class="text-input hideable">TEXT INPUT GOES HERE</div> 

Скрытие .hideable элементов, пока они не будут выбраны осуществляются с простым CSS:

.hideable { 
    display: none; 
} 

и немного JavaScript + Jquery может обрабатывать переключение на скрытие и отображение виджетов, например:

var closerClass = "last-day"; 

$(".hide-and-show").change(function() { 
    var selectValue = $(this).val(); 

    if (selectValue === closerClass) { 
    $(".hideable").hide(); 
    } else { 
    var classname = "." + selectValue; 
    $(classname).show(); 
    } 
}); 

Я продемонстрировал Codepen example.

Смежные вопросы