2017-04-04 78 views
0

我得到一個字符串數組,如果數組有項目,我想做一件事,如果沒有,我想做另一件事。我不知道如何檢查數組是否爲空。另外,當在chrome調試器中逐句通過我的代碼時,即使數組中有項目,長度仍然爲0,因此我不能使用formErrors.length > 0jQuery - 檢查數組是否爲空或具有屬性

這裏是我的代碼來獲取錯誤。這工作得很好,並返回錯誤字符串數組或一個空數組:如果有

var formErrors = validateFormData(formData); 

function validateFormData(data) { 
    var errors = []; 

    if (data["title"].length == 0) { 
     errors["title"] = "Project title required"; 
    } 
    if (data["client"].length == 0) { 
     errors["client"] = "Client name required"; 
    } 
    if (data["date"].length == 0) { 
     errors["date"] = "Date required"; 
    } else if (!isValidDateFormat(data["date"])) { 
     errors["date"] = "Date format invalid - Format: dd/mm/yyyy"; 
    } 
    if (data["status"] == "") { 
     errors["status"] = "Please select current status for this project"; 
    } 
    if (data["type"] == "") { 
     errors["type"] = "Please select a project type"; 
    } 
    if (data["extras"].length == 0) { 
     errors["extras"] = "You must select at least one extra for this project"; 
    } 

    return errors; 
} 

然後,我想做的一兩件事,如果沒有錯誤,另一個。但這是不適合我的一點。

if (formErrors !== {}) { 
     displayFormErrors(formErrors); 
     event.preventDefault(); 
    } 
    else { 

     clearForm(); 
    } 

我已經嘗試了多種方式,目前爲止沒有任何工作。任何幫助表示讚賞,謝謝!

EDIT

我不能使用陣列上的。長度引起的長度爲0,即使它有數據。

Screenshot of chrome debugger

我稍微感到困惑的是什麼人都在問對不起,我不是專家,這裏是我的全部代碼,以獲得更好的理解我想要做的事。

$(document).ready(function() { 

$('#submit').on("click", onSubmitForm); 

function onSubmitForm(event) { 
    clearErrorMessages(); 

    var formData = getFormData(); 
    var formErrors = validateFormData(formData); 

    if (formErrors) { 
     displayFormErrors(formErrors); 
     event.preventDefault(); 
    } 
    else { 

     clearForm(); 

     // Do other stuff 

    } 
} 

function clearForm() { 
    $('#title').val(""); 
    $('#client').val(""); 
    $('#date').val(""); 

    $('#status').val("planning"); 

    $('#description').val(""); 

    $('.type').prop('checked', false); 
    $('.extra').prop('checked', false); 

    $('#title').focus(); 
} 

function clearErrorMessages() { 
    $(".uk-text-danger").html(""); 
} 

function getFormData() { 
    var data = []; 

    data["title"] = $('#title').val(); 
    data["client"] = $('#client').val(); 
    data["date"] = $('#date').val(); 

    data["status"] = $('select#status option:selected').val(); 

    data["description"] = $('#description').val(); 

    if ($("input[name='type']:checked").length > 0) { 
     data["type"] = $("input[name='type']:checked").val(); 
    } 
    else { 
     data["type"] = ""; 
    } 

    data["extras"] = []; 
    $.each($("input[name='extras[]']:checked"), function(index, radio) { 
     data["extras"].push(radio.value); 
    }); 

    return data; 
} 

function validateFormData(data) { 
    var errors = []; 

    if (data["title"].length == 0) { 
     errors["title"] = "Project title required"; 
    } 
    if (data["client"].length == 0) { 
     errors["client"] = "Client name required"; 
    } 
    if (data["date"].length == 0) { 
     errors["date"] = "Date required"; 
    } else if (!isValidDateFormat(data["date"])) { 
     errors["date"] = "Date format invalid - Format: dd/mm/yyyy"; 
    } 
    if (data["status"] == "") { 
     errors["status"] = "Please select current status for this project"; 
    } 
    if (data["type"] == "") { 
     errors["type"] = "Please select a project type"; 
    } 
    if (data["extras"].length == 0) { 
     errors["extras"] = "You must select at least one extra for this project"; 
    } 

    return errors; 
} 

function displayFormErrors(errors) { 
    for (var field in errors) { 
     var errorElementId = field + "Error"; 
     $('#' + errorElementId).html(errors[field]); 
    } 
} }); 

對不起,如果這是太多,我不知道還有什麼要做。

+0

只是使用IF(array_name.length == 0){/ *做某事* /} – Cam

+0

你或許應該表現出你的陣列是什麼樣子。 – Cam

+0

你爲什麼需要前陣列陣列?你在數組中插入一個數組並檢查第二個數組?那沒有意義..只是檢查錯誤[]你不需要formErrors – Konstantinos

回答

0

var errors = {};裏面的validateFormData function。 然後比較這樣的對象。

if (JSON.stringify(formErrors) !== '{}') { //do something}else { //do something}

+0

這似乎工作,但我不知道如何!無論如何:)) –

+0

錯誤你所做的是,你聲明變量錯誤= []作爲數組,並試圖比較與這樣的對象,如果(formErrors!== {})。 –

+0

,你無法比較像這樣的對象,例如formErrors!== {},而不得不使用JSON stringify將對象轉換爲字符串。 –

1

JavaScript中的空數組,字符串或對象是「falsy」。

也就是說,您可以將數組,字符串或對象直接傳遞給if條件,它將根據是否存在或不存在來運行。

if ([]) { 
    // this will never run 
} 
if ('') { 
    // this won't run either 
} 
if ({}) { 
    // nor will this 
} 
+0

嗯不完全......'var a = []; a.stg =「something」,如果(a)console.log(「yes」)// < - yes; a == true; // < - false a == false // < - true a === false // < - false a === true // < - false a?真:假// < - 真' – Redu

0

你在哪裏覈實formErrors是否爲空?此驗證(if-else)應位於提交表單的函數中。

同時嘗試使用:

如果(formErrors.length> 0)

代替:(!formErrors == {})

如果