我有这个验证表格功能:
function ValidateForm() {
var chks = document.register.elements['sendto[]'];
var hasChecked = false;
for (var i=0;i<chks.length;i++){
if (chks[i].checked){
hasChecked = true;
break;
}
}
if (!hasChecked){
alert("Please select at least one friend.");
chks[0].focus();
return false;
}
}
html是这样的:
<input type="checkbox" name="sendto[]" value="2" >
我知道这不是完整代码。完整的代码是巨大的。但基本上如果代码中只有一个复选框,上面的代码会在ValidateForm()上给出一个未定义的消息。提交表单时调用哪个,并选中上面的复选框。
但如果我在代码中有两个复选框,如下所示:
<input type="checkbox" name="sendto[]" value="2" >
<input type="checkbox" name="sendto[]" value="4" >
在调用ValidateForm()函数时提交,这可以正常工作。我做错了什么,即使检查了它,它也不适用于1个复选框?
答案 0 :(得分:3)
声明
var chks = document.register.elements['sendto[]'];
获取名称为sendto[]
的元素(元素* s *,如果有多个)
如果只有一个名为sendto[]
的元素,那么您可以在chks
中引用该元素
如果有多个名称为sendto[]
的元素,则chks
将保留对这些元素数组的引用。
执行此操作时:
for (var i=0;i<chks.length;i++){
您尝试根据chks.length
进行循环。如果chks
是一个数组(参见上文:当名称为sendto[]
时有多个元素时),则chks.length
将保留数组中的元素数。
如果只有一个sendto[]
元素,那么chks将保存该元素,并且因为元素(<input type="checkbox" name="sendto[]" value="2" >
)没有名为length
的属性,浏览器会说 length is indefined
因此,当只有一个sendto[]
复选框和多个情景时,您可以区分两种情况:
var chks = document.register.elements['sendto[]'];
var hasChecked = false;
//Check whether there is one checkbox or whether there are more
if(chks.length)
{
for (var i=0;i<chks.length;i++)
{
if (chks[i].checked)
{
hasChecked = true;
break;
}
}
}
else
{
if(chks.checked)
{
haschecked = true;
}
}
<子>
的 PS:强>
代码在ValidateForm()上给出了一个未定义的消息。即使对你来说也不清楚这意味着什么(这就是你问这个问题的原因)。尝试提供更多细节。任何现代浏览器都会提供有关未定义的更多详细信息,什么未定义哪条线等。即使是预先历史的浏览器也会告诉您抛出未定义错误的行号。有了这些细节,你可以尝试找到这条线,并试着看看发生了什么。你很可能会发现。如果您不这样做,请将此帖子发布到社区,并提供所有这些详细信息。 子>
答案 1 :(得分:1)
<script language="javascript">
function validate() {
var chks = document.getElementsByName('sendto[]');
var hasChecked = false;
for (var i = 0; i < chks.length; i++) {
if (chks[i].checked) {
hasChecked = true;
break;
}
}
if (hasChecked == false) {
alert("Please select at least one friend.");
return false;
}
return true;
}
</script>
答案 2 :(得分:0)
我会这样做。
if(!validate()){
alert("Please select at least one.");
return false;
}
function validate(){
var els=document.getElementsByName('sendto[]');
for(var i=0;i<els.length;i++){
if(els[i].checked){
return true;
}
}
return false;
}
您可以将validate用作匿名函数。