【问题标题】:Show input from the second select option显示来自第二个选择选项的输入
【发布时间】:2021-09-01 20:30:55
【问题描述】:

在用户从第二个选择菜单选项中选择一个选项后,我无法显示输入。此外,每当用户选择任何第二个选择选项时,它都应该显示他们的输入。

抱歉标题令人困惑,但基本上我的问题是如何使用从一个下拉菜单中的选择来决定接下来显示哪个下拉菜单?我想做这样的事情:

  • 选择菜单
    • 选项#1
    • 选项 #2
    • 选项#3

选择选项 #2 将打开另一个选择菜单:

  • 子选项#1.1
  • 子选项#1.2
  • 子选项#1.3

然后当用户选择选项 from 将打开另一个选择选项 2 时,它将显示选择和输入框的标签,以便用户可以输入文本

$("[data-child]").change(function() {
  const selectedGroup = $(this).val();
  var $childSelect = $("#" + $(this).attr("data-child"));
  value = $childSelect.find('option').hide()
    .filter(function(i, e) {
      return $(e).val().startsWith(selectedGroup)
    }).show().eq(0).val();
  $childSelect.val(value);
  $childSelect.trigger('change');
});

$("[data-child]").eq(0).trigger('change');
//codes for input
$(document).ready(function() {
  $("#niv1").change(function() {
    if ($(this).find("option:selected").val() == "1-1-2") {
      $("#other").removeAttr("disabled")
    } else {
      $("#other").attr("disabled", "disabled")
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form name="frmContact" id="" frmContact "" method="post" action="" enctype="multipart/form-data">
  <div class="banner">
    <h1>ID Service Request Form</h1>
  </div>
  <p>Please fill out with the information that is requested below and submit the id request form. Thank you!</p>
  <fieldset>
    <legend>Request Type</legend>
    <table width="50%" border="0" cellspacing="0" cellpadding="5">
      <tr>
        <td width="41%" align="right" valign="middle">Select a option:</td>
        <td width="59%" align="left" valign="middle">
          <select name="category1" id="category1">
            <option value="">Select Category</option>
            <option value="a">AS400</option>
            <option value="w">Windows</option>
            <option value="o">Outlook</option>
          </select>
        </td>
      </tr>
      <tr>
        <td align="right" valign="middle">Select a option:</td>
        <td align="left" valign="middle">
          <select disabled="disabled" class="subcat" id="category2" name="category2">
            <option value>Select Category</option>
            <!-- AS400 -->
            <optgroup data-rel="a">
              <option value="1">Modify Account</option>
              <option value="2">New AS400 Account</option>
              <option value="3">Change Deapartment</option>
              <option value="3">Reset Password</option>
            </optgroup>
            <!-- windows -->
            <optgroup data-rel="w">
              <option value="1">Create Domain ID</option>
              <option value="2">Access to Particular Folder/Drive</option>
            </optgroup>
            <!-- Outlook -->
            <optgroup data-rel="o">
              <option value="1">Plish Mail</option>
              <option value="2">Notification</option>
            </optgroup>
          </select>
        </td>
      </tr>
      <tr>
      </tr>
    </table>
  </fieldset>
</form>

【问题讨论】:

  • 欢迎来到 Stack Overflow。听起来您想根据用户选择有条件地显示特定选项。您在运行当前代码时是否看到任何控制台错误?
  • 不,它没有,但是当我尝试添加一个输入框但检查它是否有效但在用户选择第二个选项后它会做任何事情
  • 如果你在上面编辑你的 sn-p,那么在左边的选项下,有一个下拉菜单,上面写着No jQuery。单击它并将其更改为jQuery 3.3.1
  • @JavaWorld 我没有看到任何代码来处理第二个下拉列表。您只处理 category1 下拉列表的change
  • 我尝试了很少的方法,但我没有在这里写它,因为它不起作用,所以我需要帮助来解决它

标签: javascript html jquery


【解决方案1】:

考虑以下示例。

$(function() {
  $("#category1").change(function() {
    var selected = $(this).val();
    if (selected == "") {
      $("#category2").prop("disabled", true);
    } else {
      $("#category2 optgroup").hide();
      $("#category2 > option").not(":first").remove();
      var options = $("#category2 optgroup[data-rel='" + selected + "']").children().clone().appendTo("#category2");
      $("#category2").prop("disabled", false);
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form name="frmContact" id="" frmContact "" method="post" action="" enctype="multipart/form-data">
  <div class="banner">
    <h1>ID Service Request Form</h1>
  </div>
  <p>Please fill out with the information that is requested below and submit the id request form. Thank you!</p>
  <fieldset>
    <legend>Request Type</legend>
    <table width="50%" border="0" cellspacing="0" cellpadding="5">
      <tr>
        <td width="41%" align="right" valign="middle">Select a option:</td>
        <td width="59%" align="left" valign="middle">
          <select name="category1" id="category1">
            <option value="">Select Category</option>
            <option value="a">AS400</option>
            <option value="w">Windows</option>
            <option value="o">Outlook</option>
          </select>
        </td>
      </tr>
      <tr>
        <td align="right" valign="middle">Select a option:</td>
        <td align="left" valign="middle">
          <select disabled="disabled" class="subcat" id="category2" name="category2">
            <option value>Select Category</option>
            <!-- AS400 -->
            <optgroup data-rel="a">
              <option value="1">Modify Account</option>
              <option value="2">New AS400 Account</option>
              <option value="3">Change Deapartment</option>
              <option value="3">Reset Password</option>
            </optgroup>
            <!-- windows -->
            <optgroup data-rel="w">
              <option value="1">Create Domain ID</option>
              <option value="2">Access to Particular Folder/Drive</option>
            </optgroup>
            <!-- Outlook -->
            <optgroup data-rel="o">
              <option value="1">Plish Mail</option>
              <option value="2">Notification</option>
            </optgroup>
          </select>
        </td>
      </tr>
      <tr>
      </tr>
    </table>
  </fieldset>
</form>

#category1 更改时,这会显示和隐藏#category2 中的选定类别。

【讨论】:

  • 这缩短了解决某些问题的代码。我的问题是,例如,当用户从第一个选择中选择 AS400,然后从第二个选择中选择部门更改时,它应该显示带有输入文本的标签,如果用户返回第一个选项并选择另一个选项,它应该隐藏另一个选项并选择他选择或选择的内容
  • @JavaWorld Input 元素在哪里?我在您的示例中没有看到这一点。您没有在帖子中指定这一点。请确保您有一个最小的、可重现的示例:stackoverflow.com/help/minimal-reproducible-example 它应该包含所有元素和经过测试的代码。
  • 现在我会添加我尝试过的内容,我会在同事的帮助中更新 sn-p
  • @JavaWorld 我看到了更新。我现在看到了对 HTML 中不存在的元素的引用。您能否更新所有内容以包含所有需要的部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 2014-06-20
  • 2021-11-25
  • 2015-10-12
  • 1970-01-01
相关资源
最近更新 更多