jQuery - 检查数组是否为空或具有属性

时间:2017-04-04 20:21:18

标签: javascript jquery arrays forms

我得到一个字符串数组,如果数组有项目我想做一件事,如果不是,我想做另一件事。我不确定如何检查数组是否为空。此外,当在chrome调试器中单步执行我的代码时,即使数组中包含项目,长度仍为0,因此我无法使用formErrors.length > 0

这是我获取错误的代码。这很好,并返回一个错误字符串数组或一个空数组:

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();
    }

我尝试了多种方式,到目前为止还没有任何工作。感谢任何帮助,谢谢!

修改

我不能在数组上使用.length导致长度为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]);
    }
} });

很抱歉,如果这太多了,我不确定还能做什么。

3 个答案:

答案 0 :(得分:1)

空数组,字符串或对象是" falsy"在JavaScript中。

也就是说,您可以将数组,字符串或对象直接传递给if条件,并且它将根据是否存在某些内容而运行。

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

答案 1 :(得分:0)

您在哪里验证formErrors是否为空?此验证(if-else)应该在提交表单的函数内。

也可以尝试使用:

  

if(formErrors.length> 0)

而不是:

  

if(formErrors!== {})

答案 2 :(得分:0)

var errors = {};内的

validateFormData function。 然后比较像这样的对象。

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