2013-09-24 36 views
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++ 
    } 

} 

但是,如果目前的類別是不是數組,即只有一個類別,然後我得到一個未定義的類別值不收集。通過在運行for循環之前檢查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

如果對象具有定義的屬性長度,它應該是一個數組。請小心比較,因爲如果(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]') 
} 
相關問題