2

我正在尝试编写自己的函数来评估输入字段以查看它们是否具有值。所以我写了这个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/

4

3 回答 3

2

我重新安排了您的代码,请在此处查看:

$("#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;以防出现错误,因此功能和表单提交将在此处停止(以防出现错误)。

请记住,输入字段是自关闭的,因此/就像我在演示中所做的那样,将关闭代码添加到输入中。

演示在这里

于 2013-08-16T15:38:11.330 回答
1

在循环外保留一个布尔值,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

于 2013-08-16T15:35:38.520 回答
0

.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();
于 2013-08-16T15:37:52.470 回答