您究竟如何检查您获得的复选框值是变量还是数组。我有一个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。当然这可能是我的错,因为我把这个问题的标题称为“如何检查复选框值是否为数组”或许更好的标题是“如何检查是否存在多个具有相同名称的复选框”。我改变了这个以更好地反映我的问题。
答案 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]' )
}