如果所选选项为空,如何防止提交?

How can I prevent submit if selected options are empty?

如果任何选定菜单为空,我试图阻止使用 Onclick 事件(使用 javascript)提交。也许显示警报。可能吗?

<select name="form1" form="my_form">
    <option value="Option 1">Option 1</option>
    <option value="Option 2">Option 2</option>
</select>

<select name="form2" form="my_form">
    <option value="Option 1">Option 1</option>
    <option value="Option 2">Option 2</option>
</select>

<form id="my_form" method="post" action="selections.php">
    <input type="submit" value="Send">
</form>

我会为您的提交按钮使用一个 ID:

<input type="submit" value="Send" id="submitButton" disabled>

之后只需为您的选项创建一个函数:

    function onItemSelected() {
       var selectedItem1 = document.getElementByName("form1").selectedIndex;
       var selectedItem2 = document.getElementByName("form2").selectedIndex;
       if (selectedItem1 && selectedItem2) {
         document.getElementById('submitButton').disabled = false;
       } else {
             document.getElementById('submitButton').disabled = true;
          }
        }

您必须在每个 select 输入中调用 onItemSelected: 例如:

<select name="form2" form="my_form" (onchange)="onItemSelected()">

是的,如果菜单为空,您可以在 select 标签中使用必需的 属性 来阻止提交表单。

您的 select 输入不在您的 'form' 标签中是否正常?在什么情况下它们会是空的?因为 'option 1' 默认为 selected

建议的解决方案

最方便的方法是使用 HTML 由浏览器处理的表单验证 (required) 如epascarello

所述

不幸的是,您的 selects 默认使用第一个选项。您可以只添加一个没有值的占位符选项。这将防止在没有 selecting 的情况下提交表单。

如果您不想显示它,您可以为用户隐藏此选项。示例中的第二个 select。

添加了第三个输入来回答您在评论中的问题。没有值意味着它将 <option> 标签的内容作为默认值。仅当您在此选项中没有文本时才有效。

<form id="my_form">
    <select required name="form1" form="my_form">
        <option value>Placeholder</option>
        <option value="Option 1">Option 1</option>
        <option value="Option 2">Option 2</option>
    </select>

    <select required name="form2" form="my_form">
        <option hidden disabled selected value>Choose an option</option>
        <option value="Option 1">Option 1</option>
        <option value="Option 2">Option 2</option>
    </select>

    <select required name="form3" form="my_form">
        <option>I'm the value if none set</option>
        <option value="Option 1">Option 1</option>
        <option value="Option 2">Option 2</option>
    </select>


    <input type="submit" value="Send">
</form>

var selectElts = document.getElementsByTagName('select');
var formElt = document.getElementById('my_form');

formElt.addEventListener('submit', function(e) {
  // stop the form submission
  e.preventDefault();
  var error = 0;

  // Check all select menus
  for (var i = 0; i < selectElts.length; i++) {
    // Check if current input's value is empty
    if (selectElts[i].value.trim() === '') {
      error = error + 1;
      alert(selectElts[i].name + ' is empty');
    }
  }

  // if there are no errors, then we submit the form
  if (error === 0) {
    formElt.submit();
  } 
});