如果输入文本不在数据列表中,则禁用提交

问题描述 投票:1回答:1

如果在此输入中输入的文本不在datalist中,则我想禁用此提交按钮。

<label><h5>Code application</h5></label>
<input
  name="applicationCodeId"
  id="applicationCodeId"
  list="applicationCodeList"
  class="disableAutoComplete"
/>
<datalist id="applicationCodeList">
  <div th:each="applicationCode : ${applicationCodes}">
    <option
      name="applicationCodeId"
      th:text="${applicationCode.applicationCodeName}+ ' : ' +${applicationCode.projectName}"
      th:value="${applicationCode.getId()}"
    ></option>
  </div>
</datalist>
javascript input submit datalist
1个回答
0
投票

您可以依靠提交按钮/输入的disabled属性:每次修改输入内容时都对其进行更新。一种选择是使用querySelector检查当前文本是否与选择器option[value="..."]匹配选项值。像这样的东西:

function myFunction() {
  const currentValue = document.getElementById('applicationCodeId').value;
  document.getElementById("mySubmit").disabled =
    currentValue.length === 0 ||
    document.querySelector('option[value="' + currentValue + '"]') === null;
}
<label><h5>Code application</h5></label>
<input
  name="applicationCodeId"
  id="applicationCodeId"
  list="applicationCodeList"
  class="disableAutoComplete"
  oninput="myFunction()"
/>
<datalist id="applicationCodeList">
  <option value="Option 1">
  <option value="Option 2">
</datalist>
<input type="submit" id="mySubmit" disabled>

[请注意,在使用<datalist>时,选项值优先于文本:您可以在输入中键入文本,但是它将替换为该值。这就是为什么上述解决方案基于值的原因:)


请注意,数据列表应仅包含<option>元素:无<div>(请参阅documentation)。名称也可以在选项中删除。

由于上述解决方案适用于value属性,因此您的代码可能会变成:

<datalist id="applicationCodeList">
  <option
    th:each="applicationCode : ${applicationCodes}"
    th:value="${applicationCode.applicationCodeName}+ ' : ' +${applicationCode.projectName}"
  >
</datalist>

您将必须在服务器端检索ID;)

© www.soinside.com 2019 - 2024. All rights reserved.