2017-02-09 58 views
1

我不是CakePHP和Javascript的老手,所以我遇到了代碼問題。CakePHP不會將選定的值從下拉列表更改爲默認值

我想要做的是使用Formhelper創建一個下拉列表。有一個值顯示另一個列表(例如:值1)。如果我選擇「值1」,則會顯示第二個下拉列表,如果我從第一個列表中選擇另一個值,則不會顯示第二個下拉列表。

到目前爲止好,這是工作。問題是,如果我從第一個列表中選擇另一個選項來隱藏第二個列表,那麼當我再次顯示第二個列表時,它將不會重置第二個列表選項。

每當我在第一個列表中調用onChange時,如何將選中的選項重置爲secondList中的空選項?

這是代碼:

<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

它應該工作,只要確保你呼應第一選擇:'<?PHP的echo $這個 - >形式 - >輸入( 'firstList',陣列(...' – lp1051

+0

您的javascript將始終在secondList中選擇具有空值的選項,無論您在firstList中選擇什麼選項。有什麼不起作用? – lp1051

+0

哦,這是由於缺少「回聲」而導致的錯字錯誤,我將對其進行編輯。 Ip1051,我真的不知道,因爲我認爲它應該這樣做,但它不是選擇空的選項。我試圖從第二個列表中使用jQuery獲得所有選項,看看它是否實際上所有的選項,但它只顯示secondList顯示時選擇的選項。 例如: 如果我在secondList中選擇value2並將選項從firstList更改爲不顯示secondList。當我從第二個列表中獲得所有選項時,它只顯示值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