2013-04-16 96 views
0

這是我第一次嘗試使用Javascript和jQuery進行數據驗證。檢查數組長度javascript

我的錯誤數組被填滿,但我的問題是檢查這個數組是否爲空。在我的情況下,它總是如此。它總是提醒我「的錯誤leeg」,即使該數組是空的,用console.log(error)檢查:

<script type="text/javascript"> 
$(document).ready(function() 
{ 
    var error = []; 
    $('#contactformulier').submit(function() { 

     if($('input#namet').val().length == 0) { 
      error['naam'] = 'Geen geldige naam ingevuld'; 
     } else{ 
      delete error['naam']; 
     } 

     if($('input#mailt').val().length == 0){ 
      error['mail'] = 'Geen geldig e-mailadres ingevuld'; 
     } else{ 
      delete error['mail']; 
     } 

     if($('textarea#message').val().length == 0){ 
      error['bericht'] = 'Geen geldig bericht ingevuld'; 
     } else{ 
      delete error['bericht']; 
     } 

     console.log(error); 
     if (error.length < 1) { 
     alert('errors leeg'); 
     } 

     return false; 
    }); 
}); 
</script> 

有什麼建議?

+2

你永遠不添加任何東西到陣列中。 'error ['naam']'在數組對象上分配一個屬性,它不會*放入數組中的任何元素。 – Chad

+0

哈哈,我確實在這種情況下失敗了......哇! – Jordy

+0

@Chad什麼'錯誤[0] =「富」;'做?它使用鍵「1」和值「foo」向數組添加一個屬性。數組是對象。只有在使用數字作爲關鍵字時纔會影響「長度」屬性。 – Ian

回答

6

只能使用數字索引數組 - 至少如果你想使用數組的功能,如數組長度。

var error = []; 
error.push({ naam: "geen geldige naam" }); 
error.push({ mail: "geen geldige email" }); 
error.length == 2 
+0

「至少如果你想使用數組的功能,如Array#length」 - 這是重要的部分:) – Ian

+0

感謝您的回答,從其他答案的一些解釋我'我會完成我想要的結果。多謝你們! – Jordy

2

這是因爲您要向數組添加屬性而不是索引項。

可以使用push()項添加到數組:

error.push('Geen geldig bericht ingevuld'); 

,你就會開始驗證之前,您清除數組:

error.length = 0; 
// start validation logic 
+0

+1中混在了'error.length = 0;'。完全是我的想法。這樣他就不必使用'delete' – Ejaz

0

的問題是,你混淆了JavaScript類型中。你認爲是一個關聯數組,在JavaScript中是一個對象的屬性和方法。

所以你需要與它定義:

var error = {}; 

如果一個簡單的數組空虛可以與arr.length > 0進行檢查,對象「空虛」(即不存在的屬性/方法)可以與jQuery方法$.isEmptyObject()進行檢查:

if ($.isEmptyObject(error)) { ... } 

REF:https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects

-1
<script type="text/javascript"> 
$(document).ready(function() 
{ 
    var error; 
    var inError; 
    $('#contactformulier').submit(function() { 

     error = {}; 
     inError = false; 

     if($('input#namet').val().length == 0) { 
      error['naam'] = 'Geen geldige naam ingevuld'; 
      inError = true; 
     } 

     if($('input#mailt').val().length == 0){ 
      error['mail'] = 'Geen geldig e-mailadres ingevuld'; 
      inError = true; 
     } 

     if($('textarea#message').val().length == 0){ 
      error['bericht'] = 'Geen geldig bericht ingevuld'; 
      inError = true; 
     } 

     console.log(error); 
     if (inError) { 
     alert('errors leeg'); 
     } 

     return false; 
    }); 
}); 
</script> 
0

正如其他人所說的,您不能將Object的長度用作關聯數組,.length屬性用於實數數組。

你可以做的,雖然是什麼,是問他有多少項有:

var n = Object.keys(error).length;