2017-02-09 17 views
1

Я не являюсь ветераном CakePHP и Javascript, поэтому у меня возникают проблемы с кодом.Cakephp не меняет выбранное значение из раскрывающегося списка на значение по умолчанию

То, что я пытаюсь сделать, это создать выпадающий список, используя Formhelper. Существует значение, отображающее другой список (ex: значение 1). Если я выберу «Значение 1», появится второй раскрывающийся список, и если я выберу другое значение из первого списка, второй раскрывающийся список не появится.

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

Как сбросить выбранную опцию до пустой опции во втором списке каждый раз, когда я вызываю onChange в firstList?

Это код:

<script type="text/javascript"> 
    function showSecondList(field) { 
     switch (field.val()) { 
      case 'value1': 
       $('#divSecondList').show(); 
       $('#secondList').val(""); 
      break; 
      default: 
       $('#secondList').val(""); 
       $('#divSecondList').hide(); 
     } 
    } 
</script> 

<div> 
    <?php $this->Form->input('firstList', array(
      'label' => 'firstList', 
      'type' => 'select', 
      'empty' => '- select -', 
      'options' => array(
          'value1' => 'value1', 
          'value2' => 'value2' 
      ), 
      'onChange' => 'showSecondList($(\'#firstList\'));' 
     )); 
    ?> 
    </div> 

<div id="divSecondList" style="display:none"> 
    <?php echo $this->Form->input('secondList', array(
      'label' => 'secondList', 
      'type' => 'select', 
      'empty' => '- select -', 
      'options' => array(
          'value1' => 'value1', 
          'value2' => 'value2' 
      ), 
     )); 
    ?> 
</div> 
+0

Он должен работать, просто убедитесь, что эхо первого выбора: ' форма-> вход ('firstList', массив (...' – lp1051

+0

Ваш javascript всегда будет выбирать параметр с пустым значением в secondList, независимо от того, какой вариант вы выберете в firstList. Что не работает? – lp1051

+0

Ой, это была опечатка ошибка отсутствия «эха». Я отредактирую ее. Ip1051, я действительно не знаю, потому что я думал, что он должен это сделать, но он не выбирает пустую опцию. Я попытался получить все опции из второго списка, используя jQuery, чтобы увидеть, на самом деле все параметры, но он показывает только опцию, выбранную при показе второго списка. пример: Если я выберем значение2 во втором списке и измените параметр из первого списка, чтобы не отображать второй список. Когда я получаю все варианты из второго списка, он показывает только значение2, а не каждую опцию. –

ответ

0

Это, как представляется, проблема JavaScript, а не торт, так что позвольте мне переписать его как простой HTML и JavaScript, так что вы можете проверить, что он работает, как вы хотите. Если это не в вашем коде, возможно ли, что у вас есть другой JavaScript, прикрепленный к этим выборам? Или вы видите какие-либо ошибки в консоли?

function showSecondList(field) { 
 
     switch (field.val()) { 
 
     case 'value1': 
 
      $('#divSecondList').show(); 
 
      $('#secondList').val(""); 
 
      break; 
 
     default: 
 
      $('#secondList').val(""); 
 
      $('#divSecondList').hide(); 
 
     } 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div> 
 
    <div class="control-group"> 
 
    <label class="control-label" for="firstList">firstList</label> 
 
    <div class="controls"> 
 
     <select name="data[firstList]" id="firstList" onchange="showSecondList($('#firstList'));"> 
 
     <option value="">- select -</option> 
 
     <option value="value1">value1</option> 
 
     <option value="value2">value2</option> 
 
     </select> 
 
    </div> 
 
    </div> 
 
</div> 
 

 
<div id="divSecondList" style="display:none"> 
 
    <div class="control-group"> 
 
    <label class="control-label" for="secondList">secondList</label> 
 
    <div class="controls"> 
 
     <select name="data[secondList]" id="secondList"> 
 
     <option value="">- select -</option> 
 
     <option value="value1">value1</option> 
 
     <option value="value2">value2</option> 
 
     </select> 
 
    </div> 
 
    </div> 
 
</div>

+0

чувак спасибо за помощь, но я действительно не могу понять, почему эта проблема происходит. Он не получает никаких ошибок, если я его отлаживаю, javascript в порядке (источник, тип и т. Д.), И есть некоторые странные действия (я думаю, но я не ветеран с js). Дело в том, что если я создаю цикл в любом из вариантов для получения значений параметров и вдавливаю в массив для отображения в режиме предупреждения, он отображает только выбранное значение (используя что-то вроде этого): field = document.getElementById ("firstList"); for (i = 0; i

+0

Другая возможная причина заключается в том, что у вас есть несколько элементов с идентификатором 'id =" firstList "на текущей странице, которая не является выделенной. Попробуйте открыть консоль разработчика и найти ее (лучше искать в консоли, а не в источнике страницы, если вы создаете HTML-код на лету). – lp1051

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

  • Нет связанных вопросов^_^