表单验证 - 多个复选框

时间:2015-08-20 23:22:21

标签: javascript validation

我需要确保如果没有勾选至少一个复选框(很多),表单不会提交,这就是我现在所拥有的,我认为它应该有效:

<script type="text/javascript">
function valthis() {
 var checkBoxes = document.getElementsByClassName( 'myCheckBox' );
 var isChecked = false;
 for (var i = 0; i < checkBoxes.length; i++) {
    if ( checkBoxes[i].checked ) {
        isChecked = true;
    };
    };
    if ( !isChecked ) {

    alert( 'Please, check at least one checkbox!' );
    return false;
    }   
   }

</script>  

我很感激我能得到任何帮助!!!

问:梅森。

2 个答案:

答案 0 :(得分:1)

这看起来很不错,但您在提交表单之前请致电valthis(),您可以这样做&#34;手动&#34;验证一切正常后,在代码中。

基本上,这意味着您有一个实际调用valthis的基本按钮(而不是&#34;提交&#34;一个):

<input type="button" onClick="valthis()" ></input>

然后在valthis()

的末尾
document.getElementById("myForm").submit();

答案 1 :(得分:0)

您没有提供有关实际问题的详细信息,因此无法准确说出出现了什么问题。

这是你应该拥有的,无论你实际拥有的是什么都没有实际意义。表单上应该有一个提交监听器:

<form onsubmit="return valthis(this)" ... >

表格中应该有一个提交按钮:

<input type="submit">

<button>Submit</button>

提交侦听器应返回 false 以取消提交,或任何其他值不取消。该函数应该有一个更有意义的名称,比如“checkCheckboxes”,一旦找到复选框,循环就会返回:

function valthis() {

  var checkBoxes = document.getElementsByClassName( 'myCheckBox' );
  var isChecked = false;

  // Break from loop if isChecked is true
  for (var i = 0; i < checkBoxes.length && !isChecked; i++) {
    isChecked = checkBoxes[i].checked;
  }

  return isChecked;
}

在一个块之后不需要分号,它将代表一个空的陈述(没有任何危害,只是多余的)。

如果您能保证对现代API的支持,那么:

<form onsubmit="return this.querySelectorAll('input[type=checkbox]:checked').length > 0;" ...>

会做的。