【问题标题】:Display extra form fields if dropdown is selected如果选择了下拉菜单,则显示额外的表单字段
【发布时间】:2017-06-22 04:55:16
【问题描述】:

如果用户从下拉列表中选择'Yes',我正在尝试显示两个额外的表单字段。如果用户没有从下拉列表中选择'Yes',那么这两个额外字段不是必需的并且被禁用,但是如果选择'Yes',则这些字段必须在提交表单之前填写。到目前为止我有这个,但是它不起作用。如果有人能指出这个问题,将不胜感激。

HTML:

<form id="form" method="post" action="action.php">

  <div class="form-group">
    <label class="control-label">Defect?</label>
    <select onclick='checkIfYes()' class="select form-control" id="defect" name="defect">
      <option id="No" value="No">No</option>
      <option id="Yes" value="Yes">Yes</option>
    </select>
  </div>

  <div id="extra" name="extra" style="display: none">

    <label class="control-label" for="desc">Description</label>
    <input class="form-control" type="text" id="desc" name="desc" required disabled>

    <label class="control-label" for="auth_by">Authorised By</label>
    <input class="form-control" type="text" id="auth_by" name="auth_by" required disabled>

  </div>

  <div class="form-group">
    <button class="btn btn-info" id="submit" name="submit" type="submit">Submit
    </button>
  </div>

</form>

JavaScript:

function checkIfYes() {
  if (document.getElementById('defect').value == 'Yes') {
    document.getElementById('extra').style.display = '';
    document.getElementById('auth_by').disabled = false;
    document.getElementById('desc').disabled = false;
  } else {
    document.getElementById('extra').style.display = 'none';
  }
}

JSFiddle

【问题讨论】:

  • 当我运行这个小提琴时,我得到 checkIfYes 没有定义。 checkIfYes 需要在 html 之前定义。见小提琴:jsfiddle.net/z6Lm1m5x/16
  • @MattLaza - 如果选择“是”,则现在显示字段,但如果选择“否”,则不允许您提交表单。
  • 抱歉,我似乎无法在小提琴中复制它。是和否都提交表格。它在小提琴中重定向。检查是否有任何额外的 javascripts 错误被抛出?
  • @MattLaza 没问题,这是我的问题,现在可以使用。如果您想创建一个答案,我将标记为正确。感谢您的帮助!

标签: javascript jquery html


【解决方案1】:

checkIfYes 需要在引用它的 HTML 之前定义。

我还建议将 select onclick 事件更改为 onchange,以便仅在用户实际更改其值时才调用它

查看更新的小提琴:Updated Fiddle

<script>      
  function checkIfYes() {
      if (document.getElementById('defect').value == 'Yes') {
        document.getElementById('extra').style.display = '';
        document.getElementById('auth_by').disabled = false;
        document.getElementById('desc').disabled = false;
      } else {
        document.getElementById('extra').style.display = 'none';
  }
}
</script>
<form id="form" method="post" action="action.php">

  <div class="form-group">
    <label class="control-label">Defect?</label>
    <select onchange='checkIfYes()' class="select form-control" id="defect" name="defect">
      <option id="No" value="No">No</option>
      <option id="Yes" value="Yes">Yes</option>
    </select>
  </div>

  <div id="extra" name="extra" style="display: none">

    <label class="control-label" for="desc">Description</label>
    <input class="form-control" type="text" id="desc" name="desc" required disabled>

    <label class="control-label" for="auth_by">Authorised By</label>
    <input class="form-control" type="text" id="auth_by" name="auth_by" required disabled>

  </div>

  <div class="form-group">
    <button class="btn btn-info" id="submit" name="submit" type="submit">Submit
    </button>
  </div>

</form>

【讨论】:

  • 更正:它不一定需要在HTML之前定义!
  • 在这种情况下会不会是因为该函数可能没有在脚本标签中声明?
  • 试试吧!之前定义还是之后定义并不重要!
猜你喜欢
  • 2013-08-07
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 2012-04-26
  • 2017-05-18
相关资源
最近更新 更多