【问题标题】:Cakephp not changing selected value from Dropdown to default valueCakephp 不会将所选值从下拉菜单更改为默认值
【发布时间】:2017-02-09 19:22:51
【问题描述】:

我不是 CakePHP 和 Javascript 方面的老手,所以我在编写代码时遇到了麻烦。

我正在尝试使用 Formhelper 创建一个下拉列表。有一个值显示另一个列表(例如:值 1)。如果我选择“值 1”,则会出现第二个下拉列表,如果我从第一个列表中选择另一个值,则不会出现第二个下拉列表。

到目前为止一切顺利,这是有效的。问题是,如果我从第一个列表中选择另一个选项来隐藏第二个列表,当我再次显示第二个列表时,它不会重置第二个列表选项。

每次调用 firstList 中的 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>

【问题讨论】:

  • 它应该可以工作,只要确保你回显第一个选择:&lt;?php echo $this-&gt;Form-&gt;input('firstList', array(...
  • 无论您在 firstList 中选择什么选项,您的 javascript 都将始终选择 secondList 中具有空值的选项。什么不工作?
  • 哦,没有“echo”是拼写错误。我会编辑它。 ip1051,我真的不知道,因为我认为它应该这样做,但它没有选择空选项。我尝试使用 jQuery 从 secondList 中获取所有选项,以查看它是否确实具有所有选项,但它仅显示 secondList 显示时选择的选项。示例:如果我在 secondList 中选择 value2 并将选项从 firstList 更改为不显示 secondList。当我从 secondList 获得所有选项时,它只显示 value2,而不是每个选项。

标签: javascript php jquery cakephp cakephp-2.0


【解决方案1】:

这似乎是 JavaScript 问题而不是 Cake,所以让我将其重写为简单的 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>

【讨论】:

  • 老兄感谢您的帮助,但我真的不明白为什么会发生这个问题。如果我调试它,它不会出现任何错误,javascript 是好的(源代码、类型等),并且有一些奇怪的行为(我认为,但我不是 js 的老手)。问题是,如果我在任何选择中创建一个循环以获取选项值并推入一个数组以显示在警报中,它只会显示所选值(使用类似这样的东西): field = document.getElementById("第一列表"); for (i = 0; i
  • 另一个可能的原因是您在当前页面上有多个带有id="firstList" 的元素不是一个选择。尝试打开开发控制台并搜索它(如果您正在动态创建一些 HTML,最好在控制台而不是页面源中搜索)。
猜你喜欢
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多