2011-08-09 33 views
12

我在我的形式檢索的隱藏的輸入陣列,像這樣如何檢查Javascript中的空值?

<input type="hidden" value="12:34:00" name="timetemp0"> 
<input type="hidden" value="14:45:00" name="timetemp1"> 
<input type="hidden" value="15:12:00" name="timetemp2"> 
<input type="hidden" value="16:42:12" name="timetemp3"> 
<input type="hidden" value="16:54:56" name="timetemp4"> 
<input type="hidden" value="17:03:10" name="timetemp5"> 

我的JavaScript功能的方法工作,通過使用getElementsByName單獨檢索這些(「timetemp」 + I)

for (i ; i < counter[0].value; i++) 
     { 
//finds hidden element by using concatenation of base name plus counter 

var timetemp = document.getElementsByName('timetemp'+i); 

//if there is a value alert that value to user - this is just for testing purposes at the moment 
//because there is only one of timetemp.i then it occupies position 0 in array 
      if (timetemp[0].value == null) 
      { 
       alert ('No value'); 

      } 
      else 
      { 
       alert (timetemp[0].value); 

      } 
} 

所以會發生什麼是它會提醒值的用戶在隱藏的輸入,但如果它翻過的輸入,像這樣沒有價值:

<input type="hidden" value="" name="timetemp16"> 

然後,它會說 「沒有價值」

然而TH如果功能似乎無法與這個工作:

我曾嘗試:

  1. (timetemp[0].value == null)
  2. (timetemp[0].value === null)
  3. (timetemp[0].value == undefined)
  4. (timetemp[0].value == '')

它似乎總是默認爲else子句。

任何想法?

+0

儘量只'如果(timetime [0] .value的)' –

+1

http://stackoverflow.com/questions/154059/what-is-the-best-way-to-檢查換一個空字符串型的JavaScript可以幫助你 – Im0rtality

+0

解決方案完美地工作@Richard d!我希望我能給你點,你能回答我的問題,我會接受你的答案嗎? – sqlmole

回答

28

評論作爲一個答案:

//Where is counter[0] initialized? 
for (i ; i < counter[0].value; i++) 

應改爲

if (timetime[0].value) 

這工作,因爲JS的任何變量可以被評估作爲布爾值,所以這通常會捕獲空,空或未定義的東西。

3

首先,我將檢查i被初始化爲什麼,以查看getElementsByName返回的元素是否是您認爲的元素。也許通過使用像timetemp0這樣的硬編碼名稱來嘗試分割問題,而不用串接。您也可以通過瀏覽器調試器(FireBugChrome Dev ToolsIE Dev Tools)運行代碼。

另外,您如果條件,這應該足夠了:

if (!timetemp[0].value) { 
    // The value is empty. 
} 
else { 
    // The value is not empty. 
} 

JavaScript中的空字符串是falsey值,所以,邏輯否定讓您進入if區塊。

1

你的腳本在幾個地方似乎不正確。

試試這個

var timetemp = document.getElementsByTagName('input'); 

for (var i = 0; i < timetemp.length; i++){ 
    if (timetemp[i].value == ""){ 
     alert ('No value'); 
    } 
    else{ 
     alert (timetemp[i].value); 
    } 
} 

例子:http://jsfiddle.net/jasongennaro/FSzT2/

這是我改變了:

  1. 開始經由TagName讓所有的input秒。這使得數組
  2. 使用vari進行初始化,然後使用timetemp.length屬性通過timetemp數組進行循環。
  3. 使用timetemp[i]引用每個inputfor statement
+2

你錯了爲什麼我要找到所有的投入,我在我的形式在50投入,我只是想找到timetemp0,timetemp1,timetemp2 - 這並不適應這樣的! – sqlmole

+1

公平的@sqlmole。但沒必要嚷嚷。我只是想幫助你。我根據你的問題回答,其中沒有提及其他投入。 –

0

計數器在for循環中出現不正確的(或我們缺少一些代碼)。 Here's a working Fiddle

此代碼:

var timeTempCount = 5; //I'm not sure where you're getting this value so I set it. 

for (var i = 0; i <= timeTempCount; i++) 
+0

您如何知道OP需要驗證XHTML? '/>'不是絕對的要求。 – user113716

+0

im使用HTML5,但感謝的代碼示例櫃面我在未來使用XTHML 1.1 – sqlmole

0

在我看來,使用「如果(值)」來判斷一個值是否爲空值是不嚴格的,因爲結果「V真?假」是假的時,v的值是0(0不是一個空值)。您可以使用此功能:

const isEmptyValue = (value) => { 
    if (value === '' || value === null || value === undefined) { 
     return true 
    } else { 
     return false 
    } 
}