6
for (i = 0; i < document.checks.user.length; i++) //for all check boxes
{
    if (document.checks.user[i].checked == true )
    {
        document.checks.submit();
        return 0;
    }
}

<body>
<form action="" method=POST name="checks" ID="Form2">
  I have a bike:
  <input type="checkbox" name="user" value="Bike" ID="Checkbox1">
  <br>
  <br>
</form>
<input type="button" value="Delete" 
    class="btn" onclick="sub_delete()" 
    onmouseover="hov(this, 'btn btnhov')" onmouseout="hov(this, 'btn')" 
    id="Button1" name="Button1" 
/>
</body>

正如您可能已经知道,当只剩下一个复选框时 document.checks.user.length = undefined。确保当只有一个复选框时,它会被删除的最有效方法是什么。我只是想在此处的 if 语句之前将其添加为单独的 if 语句......任何建议。

谢谢。

4

8 回答 8

8

使用循环控制变量,如果长度未定义,则将其设置为 1...

var len = document.checks.user.length;
if(len == undefined) len = 1;
for (i = 0; i < len; i++) //for all check boxes

最好的祝福...

于 2009-02-10T23:25:38.493 回答
3
if (document.getElementById('Checkbox1').checked) { /* do something */ }

如果你想循环一堆复选框,你可以循环表单的输入字段,比如:

var formNodes  = document.checks.getElementsByTagName('input');
for (var i=0;i<formNodes.length;i++) {
   /* do something with the name/value/id or checked-state of formNodes[i] */
}
于 2009-02-11T07:31:27.920 回答
1
if(document.checks.user[0]) {
  //it's an array
}
else {
  //it's a single element
}
于 2009-02-11T05:36:32.690 回答
1

您的问题有些令人困惑,因为您的 javascript 显然必须在一个名为“sub_delete”的函数中才能使用......具有编辑问题的强大能力的人可能会通过使问题更清晰来改善问题......

因此,您必须解决的第一个问题是,对于具有给定名称“用户”的单个复选框,它不是一个数组,因此没有定义的长度,而且如果您尝试将其作为数组访问..事情变得混乱.. 完全重写您的 javascript 函数可能如下所示:

    function sub_delete{
        if (typeof document.checks.user.length === 'undefined') {
   /*then there is just one checkbox with the name 'user' no array*/
        if (document.checks.user.checked == true )
                            {
                                document.checks.submit();
                                return 0;
                            }   
    }else{
  /*then there is several checkboxs with the name 'user' making an array*/
        for(var i = 0, max = document.checks.user.length; i < max; i++){
            if (document.checks.user[i].checked == true )
                            {
                                document.checks.submit();
                                return 0;
                            }

        }
    }
    }//sub_delete end

HTH, -FT

于 2010-08-02T06:23:57.133 回答
1

我也面临同样的问题,总共有 5 个复选框,其中 4 个被禁用,1 个被启用。现在 checkboxId.length 是未定义的,所以我能想到的唯一选项是 if(checkboxId.length ==undefined ){checkboxId.checked=true & submith the form}。

于 2010-12-29T06:54:29.493 回答
1

这很简单,只需创建一个与现有复选框输入标签名称相同的隐藏输入标签。

例如:

<input type="checkbox" name="user" value="Bike" ID="Checkbox1">
<input type="hidden" name="user" value=""/>
于 2012-09-17T11:39:18.777 回答
-1

我可能会遍历 document.checks.elements,寻找 .type == 'checkbox'。

于 2009-02-10T23:19:00.413 回答
-2

jQuery 是你的朋友:

$("input[type='checkbox']").attr('checked', false);

(...如果您可以使用 jQuery?)

于 2009-02-10T23:12:22.160 回答