[英]Trouble evaluating all values of an array in a for loop in Javascript
我正在尝试编写自己的函数来评估输入字段,以查看它们是否具有值。 所以我写了这个for循环:
$("button").click(function(){
for (var ii = 0; ii < personalInfo.length; ii++) {
if ($(personalInfo[ii]).val() == 0) {
$(personalInfoLabels[ii]).addClass("required");
}
else{
$("button").parent("fieldset").slideUp();
}
};
});
到目前为止,循环没有问题,可以识别出空的数组位置并正确标记它们。
但是,如果任何头寸都有值,则事件发生。 我该如何说循环的每个位置是否都有一个值,即触发事件,但如果没有标记必填字段,该如何说?
代码的JSFiddle可在http://jsfiddle.net/bjKX7/获得。
我重新整理了一下您的代码,请点击此处:
$("#cont-one").click(function () {
var error = 0;
for (var ii = 0; ii < personalInfo.length; ii++) {
if ($(personalInfo[ii]).val() == 0) {
$(personalInfoLabels[ii]).addClass("required");
error++;
} else {
$(personalInfoLabels[ii]).removeClass("required");
}
};
if (error) {
return false;
}
$("#cont-one").parent("fieldset").slideUp();
});
该代码将遍历所有输入,并将类添加到所需的类中。 万一已填满,它也会删除该类。 我还添加了一个return false;
的return false;
如果有错误,则函数和表单提交将在此处停止(如果有错误)。
请注意,输入字段是自动关闭的,因此请像在演示中一样在输入中添加/
关闭代码。
将布尔值保留在循环外,仅当所有字段都不为空时才为true
:
$("button").click(function(){
var all_good = true;
for (var ii = 0; ii < personalInfo.length; ii++) {
if ($(personalInfo[ii]).val() !== "") { // not empty
$(personalInfoLabels[ii]).addClass("required");
all_good = false;
} else {
$(personalInfoLabels[ii]).removeClass("required");
}
};
if (all_good) {
$("button").parent("fieldset").slideUp();
}
});
顺便说说:
$(personalInfo[ii]).val() == 0
由于胁迫而起作用,这很难看。 我会写:
$(personalInfo[ii]).val() === "" // or
$(personalInfo[ii]).val().length === 0
因为那是你的意思 。
输入字段中的值始终是字符串,而不是数字,因此您甚至可以使用===
因为您知道类型为string
。 同样, String.length
始终是一个number
。
如果一切正常,请首先验证并在最后验证.slideUp()
。 像这样
// validate first
for (var ii = 0; ii < personalInfo.length; ii++) {
if ($(personalInfo[ii]).val() == 0) $(personalInfoLabels[ii]).addClass("required");
}
// check if there are any marked as required, if not, slideUp
var fs = $("#cont-one").parent("fieldset");
if (fs.find('.required').length == 0) fs.slideUp();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.