0

您如何检查您获得的复选框值是变量还是数组。我有一个 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 不是一个数组,即只有一个类别,那么我会得到一个 undefined 并且不会收集类别值。通过在运行 for 循环之前检查 currentcategories 是否是一个数组来绕过这个问题的唯一方法是什么?如果是这样,我将如何检查 currentcategories 是否是一个数组。我在另一个论坛上读到,您可以使用 Array 的实例,但这似乎不起作用,另一个网站说这样做不会安全,因为使用 iFrame 会失败。希望有人可以阐明如何检查 currentcategories 是否是一个数组或为我的问题提供替代代码。提前致谢。

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

部分解决

Well, so far I have used the following if statement to check if the multiple checkboxes with the same name are present or not.

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

An undefined means that only one checkbox with that name is available. Otherwise their are multiple currentcategories checkboxes which can be selected. Seems to work in IE 8 Firefox and Chrome. Not convinced it is the best method. Perhaps if someone sees a flaw in this implementation or a better solution please do let me know.

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

4

1 回答 1

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]' )
}
于 2013-09-24T11:17:55.220 回答