我得到一个字符串数组,如果数组有项目我想做一件事,如果不是,我想做另一件事。我不确定如何检查数组是否为空。此外,当在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,即使它有数据。
我对人们的抱怨感到有点困惑,我不是专家,这是我的完整代码,可以更好地了解我想要做的事情。
$(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 :(得分: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}