如何在js中选择下拉项目时启用按钮?

Posted

技术标签:

【中文标题】如何在js中选择下拉项目时启用按钮?【英文标题】:How to enable button upon dropdown item selection in js? 【发布时间】:2020-09-12 23:42:43 【问题描述】:

这个 sn-p 显示两个选择元素和一个提交按钮。最初,按钮被禁用。

期望的行为:当两个元素都选择了第二个选项 (complete) 时启用提交按钮。如果任一元素选择了第一个选项 (received),请禁用该按钮。

当前行为:无论第一个选择元素如何,按钮都会启用/禁用。含义:如果我在第一个下拉列表中选择选项received,在第二个下拉列表中选择选项complete,按钮将启用,而不是禁用。

function enableButton() 
  var all_statuses = document.body.querySelectorAll(".selected > .form-control");
  var option_two = "complete";
  for (var i = 0; i < all_statuses.length; i++) 
    console.log(i + " This will work")
    if (all_statuses[i].value == option_two) 
      document.getElementById("btn_completed").disabled = false;
     else document.getElementById("btn_completed").disabled = true;
  


$(document).ready(enableButton);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <div class="selected">
    <select class="form-control" id="select_one" onchange="enableButton()">
      <option value="received">received</option>
      <option value="complete">complete</option>
    </select>
    <select class="form-control" id="select_two" onchange="enableButton()">
      <option value="received">received</option>
      <option value="complete">complete</option>
    </select>
  </div>
</form>

<button id="btn_completed">Completed</button>

所以,问题是:如果所有选择元素都选择了选项complete,如何启用按钮,或者如果至少一个选择元素的选项不同于complete,如何禁用按钮?

【问题讨论】:

如果您想使用脚本提交表单,请不要在表单="submit" 中调用任何内容。如果您测试服务器上是否存在按钮,禁用提交按钮也会停止提交 不太确定您要做什么,但您是否多次设置启用和禁用相同的按钮?也许你应该使用 break;曾经禁用过? 您显示的选择字段包含两个选项,其值为 item_oneitem_two,但您将选择字段的值(由所选选项产生)与 @987654332 进行比较@?您的描述中是否缺少某些内容,例如这些选项值被其他东西动态设置/更改,或者......? 1.在我所做的 sn-p 中出现控制台错误(缺少 btnComplete 的定义) 2. 表单上没有 onload 属性 3. 永远不要调用任何东西 submit 4. 无论您调用什么 submit 都从您的代码中丢失。 5 为什么选择ID? 6. 为什么不是普通的ID,#在选择器中使用时需要转义 将初始设置为启用,如果其中一些值不正确,则禁用它并使用中断;否则它将继续循环,最后一项将决定它是启用还是禁用。 【参考方案1】:

工作代码:

<!DOCTYPE html>
<html>
<body>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <div class="selected">
    <select class="form-control" id="select_one" onchange="enableButton()">
      <option value="received">received</option>
      <option value="complete">complete</option>
    </select>
    <select class="form-control" id="select_two" onchange="enableButton()">
      <option value="received">received</option>
      <option value="complete">complete</option>
    </select>
  </div>
</form>

<button id="btn_completed" disabled>Completed</button>

</body>
<script>
function enableButton() 
debugger;
  var all_statuses = document.body.querySelectorAll(".selected > .form-control");
  var option_two = "complete";

  var isdisabled = false;
  for (var i = 0; i < all_statuses.length; i++) 
    console.log(i + " This will work")
    if (all_statuses[i].value != option_two) 
      isdisabled = true;
      break;
     
  

  if(isdisabled) 
    document.getElementById("btn_completed").disabled = true;
  
  else 
document.getElementById("btn_completed").disabled = false;
     



$(document).ready(enableButton);
</script>
</html>

【讨论】:

以上是关于如何在js中选择下拉项目时启用按钮?的主要内容,如果未能解决你的问题,请参考以下文章

启用 scrollX 时,包含按钮下拉列表的行会导致垂直滚动

单击 jquery-tabledit 中的编辑按钮时如何启用下拉选择框?

如何在选项/选择标签循环之外的按钮中使用 Vue.js 中下拉列表的选定 ID

使用AngularJS在下拉列表中按选定值启用/禁用按钮

在下拉列表中选择特定值时如何在联系表单 7 中启用字段

启用/禁用单选按钮选择下拉菜单