表单验证 - 多个复选框
问题描述:
我需要确保,如果至少一个复选框(很多)不打勾,表单不会提交,这是我的时刻,我认为它应该工作:表单验证 - 多个复选框
<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>
我将不胜感激任何帮助!
关于梅森。
答
这看起来很不错,但是在提交表单之前你可以打电话给valthis()
,在你确认一切正常之后,你会在代码中“手动”。
基本上,这意味着你有一个基本的按钮(而不是 “提交” 之一)实际调用valthis
:
<input type="button" onClick="valthis()" ></input>
然后在valthis()
结束:
document.getElementById("myForm").submit();
答
你有没有提供有关您的实际问题的详细信息,因此不可能确切地说出了什么问题。
这就是你应该有,无论它是你实际上是没有意义。应该有一个表单上提交监听器:
<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;" ...>
会做。
所以你的代码不工作。那是什么意思?是否抛出异常? – johnnyRose
如何提交表单,是否有提交按钮? * valthis *何时被调用? “*我认为它应该起作用”是什么意思?表单总是提交吗?永不提交?抛出错误? ...? – RobG