Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中计算for循环中数组的所有值时遇到问题_Javascript_Jquery_Loops_For Loop - Fatal编程技术网

在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();
});