2017-02-09 60 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