2012-09-26 66 views
2

我有這段代碼,它正在讀取文本框中的值,我想在嘗試parseInt()之前檢查''是否安全,但顯然不是。不能調用未定義的方法'toLowerCase'

我收到錯誤:

Uncaught TypeError: Cannot call method 'toLowerCase' of undefined

有了這個代碼:

  var total = 0; 
      $.each('.reg-input', function() { 
       if ($(this).val() == '') { 
       } 
       else { 
        total += parseInt($(this).val()); //this line throwing error 
       }      
      }); 
      if (total == 0) { 
       $('.RegisterContainer').hide();      
      } 
+1

嘗試固定支架'總+ = parseInt函數($(本).VAL());' –

+0

它不應該是'總+ = parseInt函數(this.val( ));'? – Shmiddty

+0

這是粘貼它的問題,我在代碼中的右括號 –

回答

7

'.reg-input'是一個字符串,this在這種情況下,也將是一個字符串,而不是一個DOM元素。試試這個:

$('.reg-input').each(function(){... 
+0

謝謝@Kevin B,Guffa剛剛得到了同樣的答案更快 –

+0

@ScottSelby,凱文是第一個在這一個。確保按照最古老的順序排列,你會首先看到Kevin的帖子。 – zzzzBov

-1

if ($(this).val() == "") 檢查是否值是字符串「」不是不確定的。
可以使用typeof運算符一樣,你得到奇怪的錯誤是,你在呼喚$.each用字符串,而不是一個集合這 if(typeof $(this).val() == 'undefined')

+0

不太清楚爲什麼這樣下來投票...檢查字符串''和一些未定義的東西有一個主要的區別...你應該真的給它​​一個鏡頭...... – JLeslie

+0

它沒有任何關係與問題被問。 – zzzzBov

+0

是的,他正在進入else {},因爲他的if語句失敗了......如果他的if語句捕捉到$(this)未定義,它將不會進入else,並將以OP的方式進行驗證正在尋求...他不會得到錯誤... 編輯:如果你想更通用的答案...沒有... .val()是不安全的,以評估未定義... – JLeslie

4

原因。

字符串是一個對象,所以它仍然是一個集合,但集合中的項目是字符串類的屬性和方法(並且toLowerCase就是其中之一)。

來遍歷你選擇找到的元素,你可以使用each method,而不是$.each method

$('.reg-input').each(function(){ 
    .. 
}); 

現在this內環路將是一個元素,而不是String類的成員,因此您可以使用$(this).val()來獲取值。

+0

好,趕上,這是正確的答案。 – zzzzBov

+0

感謝,很好的捕獲,它沒有幫助我留下了一個小小的錯字 - 失蹤')',然後試圖告訴人們,這不是問題 –

1

我有完全相同的問題,我通過將$(this).val()分配給一個變量,然後將該變量解析爲一個整數來解決它。所以,正確的解決方法是:

var total = 0; 
     $.each('.reg-input', function() { 
      if ($(this).val() == '') { 
      } 
      else { 
       $this_val = $(this).val(); 
       total += parseInt($this_val); //this line throwing error 
      }      
     }); 
     if (total == 0) { 
      $('.RegisterContainer').hide();      
     } 
相關問題