2015-08-20 64 views
0

我需要确保,如果至少一个复选框(很多)不打勾,表单不会提交,这是我的时刻,我认为它应该工作:表单验证 - 多个复选框

<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> 

我将不胜感激任何帮助!

关于梅森。

+0

所以你的代码不工作。那是什么意思?是否抛出异常? – johnnyRose

+0

如何提交表单,是否有提交按钮? * valthis *何时被调用? “*我认为它应该起作用”是什么意思?表单总是提交吗?永不提交?抛出错误? ...? – RobG

回答

1

这看起来很不错,但是在提交表单之前你可以打电话给valthis(),在你确认一切正常之后,你会在代码中“手动”。

基本上,这意味着你有一个基本的按钮(而不是 “提交” 之一)实际调用valthis

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

然后在valthis()结束:

document.getElementById("myForm").submit(); 
+0

输入元素没有结束标记。该按钮应该是一个提交按钮,监听器应该在表单的提交处理器上,并且不需要调用* form.submit *。 – RobG

+0

我不同意。如果有表单提交操作,则使用提交按钮将跳过验证。 – alcfeoh

+0

不,它不会。这是应用表单验证的最值得推荐的方式,主要原因是可以在不点击任何类型的按钮的情况下提交表单。 – RobG

0

你有没有提供有关您的实际问题的详细信息,因此不可能确切地说出了什么问题。

这就是你应该有,无论它是你实际上是没有意义。应该有一个表单上提交监听器:

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

应该有形式提交按钮:

<input type="submit"> 

<button>Submit</button> 

的提交监听器应该返回取消提交,或任何其他值不取消。该函数应该有一个更有意义的名字,说“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;" ...> 

会做。