如何检查是否存在多个具有相同名称的复选框或仅存在一个此类复选框?

时间:2013-09-24 11:14:03

标签: javascript

您究竟如何检查您获得的复选框值是变量还是数组。我有一个PHP脚本,它根据文件夹中存在的目录数动态填充带有复选框的表单。现在,只要有多个目录,我就可以使用以下代码

for (i=0;i<document.getElementById('editarticle').currentcategories.length;i++)
{
    if      
(document.getElementById('editarticle').currentcategories[i].checked==true)
    {

    currentcheckedcategories[currentcheckedcategoriescounter] =  
document.getElementById('editarticle').currentcategories[i].value;

    currentcheckedcategoriescounter++



    }
    else
    {
    currentnotcheckedcategories[currentnotcheckedcategoriescounter] =    
document.getElementById('editarticle').currentcategories[i].value;
    currentnotcheckedcategoriescounter++
    }

}

但是,如果current-categories不是一个数组,即只有一个类别,那么我得到一个未定义的类,并且不收集类别值。通过在运行for循环之前检查currentcategories是否为数组,是唯一可以绕过此问题的方法吗?如果是这样,我将如何检查currentcategories是否为数组。我在另一个论坛上读到你可以使用Array的实例,但这似乎不起作用,另一个网站说这样做不会失败,因为它会失败,因为它使用iFrames。希望有人可以阐明如何检查currentcategories是否为数组或为我的问题提供替代代码。提前谢谢。

PS。我需要代码是JavaScript,而不是JQuery或任何其他框架。

部分解决

好吧,到目前为止,我使用了以下if语句来检查是否存在多个具有相同名称的复选框。

if(document.getElementById('editarticle').currentcategories.length == undefined)

未定义表示只有一个具有该名称的复选框可用。否则,它们是可以选择的多个当前类别复选框。似乎可以在IE 8 Firefox和Chrome中使用。不相信这是最好的方法。也许如果有人看到这个实现中的缺陷或更好的解决方案,请告诉我。

我尝试了Edorkas代码,但该代码根据currentcategories值返回true。因此,如果我有三个名为currentcategories的复选框,并且只选择了一个,则代码将为数组返回false。当然这可能是我的错,因为我把这个问题的标题称为“如何检查复选框值是否为数组”或许更好的标题是“如何检查是否存在多个具有相同名称的复选框”。我改变了这个以更好地反映我的问题。

1 个答案:

答案 0 :(得分:0)

如果对象定义了属性长度,则它应该是一个数组。注意比较,因为当数组为空时if(result.length)将为false。但是,此功能将更有用,可在此答案Check if object is array?

中找到
window.isArray = function(candidate){
    if (candidate == null)
        return false;
    return ( Object.prototype.toString.call(candidate) === '[object Array]' )
}