【问题标题】:Dropdown lists after radio buttons are selected选择单选按钮后的下拉列表
【发布时间】:2018-01-01 02:06:15
【问题描述】:

我创建了一组 2 个单选按钮。如果选择“是”,将出现一个下拉列表。可以选择下拉列表中的任何选项。如果用户选择“前台人员”选项,下面会出现两个单选按钮,分别是“接待员”和“文员”。如果用户选择“其他”选项,则会出现一个可选文本框,供用户输入下拉列表中未列出的职位。直到这部分对我都有好处。

如果选择了“否”单选按钮,我想要创建另一个下拉列表。第二个下拉列表将包括“前台人员”和“其他”。如果用户选择“前台人员”选项,下面会出现两个单选按钮,分别是“接待员”和“文员”。如果用户选择“其他”选项,则会出现一个可选文本框,供用户输入下拉列表中未列出的位置。

这是因为 FDO 工作和其他工作可以同时应用于永久和救济工作。我尝试创建另一个 div,但我知道我不能两次使用相同的 id。我该如何解决?

我在链接中提供了代码 - https://jsfiddle.net/7ksatyaq/

<!DOCTYPE html>
<html lang="en">
<head>

    <script type="text/javascript">
  function checkPhyDis(phydis) {
    //Hide all jobs
    var tasks = document.querySelectorAll("#task1, #task2");
    [].forEach.call(tasks, function(task) {
      task.style.display = 'none';
    })

    if (phydis === "Front Desk Officer (FDO)")
      document.getElementById('task1').style.display = 'block';

    else if (phydis === "Others")
      document.getElementById('task2').style.display = 'block';
  }
</script>

</head>

<body>


    <h3 style="text-decoration: underline">Position Applied -</h3>


      <p>
          <b>Permanent or Relief?</b><b style="color: red"> *</b>
          <div class="editfield">
             <label><input type="radio" class="PR" name="PermRelief" id="yesid" value="Yes" onclick="document.getElementById('PermRelief').style.display='block'" required> Yes </label>
            <label><input type="radio" class="PR" name="PermRelief" id="noid" value="No" onclick="document.getElementById('PermRelief').style.display='none'" required> No </label>
            </div>


<div class="editfield" id="PermRelief" style="display:none">
    <label for="Position1">Permanent Job:</label>
    <br>
    <select name="Position1" id="Position1" onchange='checkPhyDis(this.value)'>
      <option value="Security Officer (SO)">Security Officer (SO)</option>
      <option value="Senior Security Officer (SSO)">Senior Security Officer (SSO)</option>
      <option value="Supervisor (SS)">Supervisor (SS)</option>
      <option value="Senior Supervisor (SSS)">Senior Supervisor (SSS)</option>
      <option value="Chief Security Officer (CSO)">Chief Security Officer (CSO)</option>
      <option value="Security Executive (SE)">Security Executive (SE)</option>
      <option value="Operation Executive (OE)">Operation Executive (OE)</option>
      <option value="Front Desk Officer (FDO)">Front Desk Officer (FDO)</option>
      <option value="Others">Others</option>
    </select>


    <div id="task1" name="Position1" style="display:none;">
      <label><input type="radio" name="FDO" id="Receptionistid" value="Receptionist"> Receptionist </label>
      <label><input type="radio" name="FDO" id="Clerkid" value="Clerk"> Clerk </label> <br>
    </div>


    <div id="task2" name="Position1" style="display:none;">
      <label for="Others">If the position you want to apply is not stated in any of the options <br> please state in the box below:</label>
      <br>
      <textarea rows="4" cols="50" name="Other_Position" id="Other_Position"></textarea>
    </div>
  </div>
</p>


</body>
</html>

【问题讨论】:

    标签: javascript php html radio-button html-select


    【解决方案1】:

    我对您的代码进行了快速而肮脏的增强,请看一下。

    我想你已经明白了这个概念,但我建议你如下:

    • 外包onClick 方法,让您的代码更具可读性
    • 当用户将选项更改为“是”或“否”时,还要确保 div(我称为 smalllistfulllist)再次隐藏,反之亦然。

    为了防止用户从未真正选择过的选项被存储,请添加一个具有空值的选项。

    <select name="Position1" id="Position1" onchange='checkPhyDis(this.value)'>
        <option value="">Please choose an option..</option>
        <option value="Senior Security Officer (SSO)">Senior Security Officer (SSO)</option>
        <option value="Supervisor (SS)">Supervisor (SS)</option>
        <!-- your other options... -->
    </select>
    

    然后,默认情况下会选择一个空选项(因此这个具有空值的选项必须始终位于其他选项的顶部!)

    Link to Jsfiddle


    第二种方法是通过 javascript 禁用选项。通过这样做,选项对用户可见,但不可选择。

    【讨论】:

    • 它有效,但如果我选择“小列表”下拉列表,我无法禁用“完整列表”下拉列表因为如果我选择“是”单选按钮,“完整列表”下拉列表将出现。如果在选择“是”单选按钮后选择“否”单选按钮,我可以看到“完整列表”下拉列表和“小列表”下拉列表
    • @Neal23 是的,这就是我对第二个要点的意思。我会在几分钟内更新代码。
    • 每当我从下拉列表中选择其他选项时,它总是保存为数据库中的第一个选项。你知道为什么吗?
    • @Neal23 你能说得更具体一点,什么时候发生这种情况?但是我认为如果您使用其他选项(请参阅上面的编辑答案),可以防止这种情况发生。这有帮助吗?
    • 每当我在任一下拉列表中选择另一个选项时,第一个选项始终是数据库中的值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多