2012-06-05 68 views
0

我真的不知道問題在這裏。據我所見,代碼很簡單,應該可以正常工作。無法獲得JavaScript來檢查空對象

  var Prices=""; 
      for (var PriceCount = 1; PriceCount <= 120; PriceCount++) { 
       var CurrentPrice = "Price" + PriceCount; 
       if (prevDoc.getElementById(CurrentPrice).value != null) { 
        if (Prices == "") { 
         Prices = prevDoc.getElementById(CurrentPrice).value; 
        } else { 
         Prices += "," + prevDoc.getElementById(CurrentPrice).value; 
        } 
       } else { 
        break; 
       } 
      } 

表單上可能有多達120個隱藏輸入。當我們檢查一個不存在的輸入時,該循環應該中斷。我的測試頁有兩個輸入元素被拉。在第三(空)我得到這個錯誤在Firebug:

prevDoc.getElementById(CurrentPrice) is null 

if (prevDoc.getElementById(CurrentPrice).value != null) { 

是的,它是空......這就是檢查是什麼ಠ_ಠ

是否有任何人知道我在做什麼錯?這看起來應該是非常簡單的。

編輯: 爲清晰起見,prevDoc = window.opener.document

+0

1)你確定'prevDoc'不是'null'? (你是否在代碼中設置了斷點並查看了監視窗口中的值,或者使用'console.log()'輸出了結果?2)你確定這些項目是否有'id =「...」 '而不是'name =「...」'? – Phrogz

+0

是的,它不是空的。在我把這個頁面放在這個頁面之前,這個變量被用在了這個頁面上 – CountMurphy

+0

當你執行'prevDoc.getElementById(CurrentPrice)'時,找不到'CurrentPrice'中的名字的元素,因此當你正試圖讀取它的價值。也可能是你不允許閱讀它。 – some

回答

5
if (prevDoc.getElementById(CurrentPrice).value != null) { 

可擴展到:

var element = prevDoc.getElementById(CurrentPrice);  
var value = element.value; /* element is null, but you're accessing .value */ 

if (value != null) { 
+0

嗯,我現在感覺很笨...謝謝你的幫助:D – CountMurphy

0

嘗試

if (prevDoc.getElementById(CurrentPrice) !== null) 
+0

這將永遠是'真實的'。 – 2012-06-05 22:48:12

1

值永遠不能爲null。

如果未填寫,值將爲「」或長度爲零。

如果元素不存在,您將檢查元素的存在。

var CurrentPrice = "Price" + PriceCount; 
var elem = prevDoc.getElementById(CurrentPrice); 
if (elem && elem.value != null) { 
0

我覺得應該是:

var Prices=""; 
for (var PriceCount = 1; PriceCount <= 120; PriceCount++) { 
    var CurrentPriceId = "Price" + PriceCount, 
     CurrentPrice = prevDoc.getElementById(CurrentPriceId); 

    if (CurrentPrice != null) { 
     Prices = (Prices == "") ? CurrentPrice.value : (Prices + "," + CurrentPrice.value); 
    } 
    else break; 
}