jQuery - 检查数组是不是为空或具有属性
Posted
技术标签:
【中文标题】jQuery - 检查数组是不是为空或具有属性【英文标题】:jQuery - Checking if array is empty or has attributesjQuery - 检查数组是否为空或具有属性 【发布时间】: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。
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]);
);
对不起,如果这太多了,我不知道还能做什么。
【问题讨论】:
只使用 if(array_name.length == 0)/* 做某事 */ 你应该展示一下你的数组是什么样子的。 为什么需要 formerrors 数组?您在数组中插入一个数组,然后检查第二个数组?这没有意义..只需检查错误[] 你不需要 formErrors 我不太确定你在问什么,我已经添加了我所有的代码来尝试更好地理解。 【参考方案1】:空数组、字符串或对象在 javascript 中是“falsy”。
也就是说,您可以将数组、字符串或对象直接传递到 if 条件中,它会根据是否有东西运行。
if ([])
// this will never run
if ('')
// this won't run either
if ()
// nor will this
【讨论】:
嗯不完全是..var a = []; a.stg = "something", if (a) console.log("yes") // <- yes; a == true; // <- false a == false // <- true a === false // <- false a === true // <- false a ? true : false // <- true
【参考方案2】:
var errors = ;
在validateFormData function
内。
然后像这样比较对象。
if (JSON.stringify( formErrors ) !== '') //do somethingelse //do something
【讨论】:
这似乎奏效了,但我不确定如何!无论如何谢谢:) 您所做的错误是,您将变量 errors = [] 声明为数组并尝试与这样的对象进行比较 if (formErrors !== )。 您不能像这样比较对象,例如 formErrors !== 而是必须使用 JSON,stringify 将对象转换为字符串。【参考方案3】:您在哪里验证formErrors
是否为空?这个验证(if-else)应该在提交表单的函数内部。
也尝试使用:
如果 (formErrors.length > 0)
代替:
if (formErrors !== )
【讨论】:
以上是关于jQuery - 检查数组是不是为空或具有属性的主要内容,如果未能解决你的问题,请参考以下文章