在Javascript中计算for循环中数组的所有值时遇到问题
我正试图编写自己的函数来计算输入字段,看看它们是否有值。所以我为循环写了这个:在Javascript中计算for循环中数组的所有值时遇到问题,javascript,jquery,loops,for-loop,Javascript,Jquery,Loops,For Loop,我正试图编写自己的函数来计算输入字段,看看它们是否有值。所以我为循环写了这个: $("button").click(function(){ for (var ii = 0; ii < personalInfo.length; ii++) { if ($(personalInfo[ii]).val() == 0) { $(personalInfoLabels[ii]).addClass("required"); } else{
$("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();
}
};
});
$(“按钮”)。单击(函数(){
对于(变量ii=0;ii
到目前为止,循环识别空数组的位置并正确标记它们没有问题
但是,如果任何位置具有值,则会发生事件。我如何判断循环的每个位置是否都有一个值fire event,但如果没有标记所需的字段呢
只有当所有字段都不为空时,才能在循环外部保留一个布尔值,该值为
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() === "" // or
$(personalInfo[ii]).val().length === 0
因为这就是你的意思
输入字段中的值始终是字符串,而不是数字,因此您甚至可以使用
==
,因为您知道类型是string
。类似地,String.length
始终是一个数字
首先验证,如果一切正常,则在最后验证.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();
//首先验证
对于(变量ii=0;ii
我重新安排了您的代码,请检查这里:
$("#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();
});
$(“#续一”)。单击(函数(){
var误差=0;
对于(变量ii=0;ii
此代码将遍历所有输入,并将类添加到您想要的输入中。它还将删除该类,以防它们被填充。我还添加了一个返回false代码>以防出现错误,因此函数和表单提交将在此停止(以防出现错误)
保持输入字段是自动关闭的,所以像我在演示中所做的那样,向输入添加关闭代码
演示参数列表后的语法错误(丢失)
。在//不为空
之前添加一个开口卷曲以进行修复。这不是由您决定的,而是您可能希望在与比较之前$.trim()
输入值。我知道OP不知道这一点,但在验证必填字段时,这通常是一个很好的建议,因为空格不应计数,而且您可能还希望保留else{$(personalInfoLabels[ii]).removeClass(“required”);}
,否则将来提交时不会清除新的有效字段,对吗?编辑:意识到我看到的else
来自塞尔吉奥的答案,而不是OP的代码。还是个好主意idea@FritsvanCampen同意。它没有突出显示所有错误,只是第一个错误,我不会这样做do@Ian,也很好,谢谢。修复了&现在它突出显示了所有错误。@Sergio Yep,现在您不返回了,它允许验证所有元素:)我不想更改您的代码,但以下是我组织代码的方式:-它使用jQuery在jQuery对象上迭代的本机方式,并在某种程度上简化了循环的代码。我不认为==0
是检查的好选择,因为如果输入是0
@Ian认为这也比OP的好。使用.each可以简化(这就是为什么jQuery很适合使用的原因)。我对你的评论投赞成票,如果你把它作为答案发布,我也会投赞成票;)
$("#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();
});