【发布时间】:2017-08-30 05:29:45
【问题描述】:
我得到一个字符串数组,如果数组有项目我想做一件事,如果没有我想做另一件事。我不确定如何检查数组是否为空。此外,在 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]);
}
} });
对不起,如果这太多了,我不知道还能做什么。
【问题讨论】:
-
只使用 if(array_name.length == 0){/* 做某事 */}
-
你应该展示一下你的数组是什么样子的。
-
为什么需要 formerrors 数组?您在数组中插入一个数组,然后检查第二个数组?这没有意义..只需检查错误[] 你不需要 formErrors
-
我不太确定你在问什么,我已经添加了我所有的代码来尝试更好地理解。
标签: javascript jquery arrays forms