不仅从子功能退出,而且从整个父功能退出

时间:2012-02-23 20:58:18

标签: javascript jquery function each

我想要做的是:首先,函数validate()必须逐个检查所有输入:如果它们不是空的(或空格),则转到if语句(用于检查单选按钮)但是如果一些输入为空,然后停止整个验证功能,并专注于空输入。

结果如下:http://jsfiddle.net/tt13/y53tv/4/

只需按ok按钮,您就会看到它已完成第一个功能,如果也是,则会触发。但我想退出整个validate()函数,以防有空字段,而不仅仅是来自each()函数

详细

JS

function validate() {
    $('.var_txt').each(function() {
        if ($.trim($(this).val()) == '') {
            $(this).focus();
            return false;
        }
    });

    if (!$(".answer:checked").val()) {
        alert("boom");
        return false;
    }
    return true;
}
$(document).ready(function() {
    $("#add_question").submit(function(e) {
        if (validate()) {
            alert("good");
        }
        e.preventDefault();
    })
});​

HTML标记

 <form id="add_question" method="post" action=""> 
 <table>

                  <tr>

                    <td class="var_label">

                      <input class="answer" type="radio" name="answer" value="a" /> a)

                    </td>

                    <td>

                      <input type="text" class="var_txt" name="var_a" />

                    </td>

                  </tr>

                  <tr>

                    <td class="var_label">

                      <input class="answer" type="radio" name="answer" value="b" /> b)

                    </td>

                    <td>

                      <input type="text" class="var_txt" name="var_b" />

                    </td>

                  </tr>

                  <tr>

                    <td class="var_label">

                      <input class="answer" type="radio" name="answer" value="c" /> c)

                    </td>

                    <td>

                      <input type="text" class="var_txt" name="var_c" />

                    </td>

                  </tr>

                  <tr>

                    <td class="var_label">

                      <input class="answer" type="radio" name="answer" value="d" /> d)

                    </td>

                    <td>

                      <input type="text" class="var_txt" name="var_d" />

                    </td>

                  </tr>

                  <tr>

                    <td class="var_label">

                      <input class="answer" type="radio" name="answer" value="e" /> e)

                    </td>

                    <td>

                      <input type="text" class="var_txt" name="var_e" />

                    </td>

                  </tr>

                </table>
<input type="submit" name="submit" value="ok" />

</form>

3 个答案:

答案 0 :(得分:22)

添加一个必须为false的标志才能继续。

function validate() {
    var invalid = false;
    $('.var_txt').each(function() {
        if ($.trim($(this).val()) == '') {
            $(this).focus();
            invalid = true;
            return false;
        }
    });
    if (invalid) {
        return false;
    }

    if (!$(".answer:checked").val()) {
        alert("boom");
        return false;
    }
    return true;
}
$(document).ready(function() {
    $("#add_question").submit(function(e) {
        if (validate()) {
            alert("good");
        }
        e.preventDefault();
    })

});​

答案 1 :(得分:4)

  

我们可以通过使回调函数返回false来在特定迭代中中断$ .each()循环。返回非false与for循环中的continue语句相同;它将立即跳到下一次迭代。

在验证开始时设置一个标记:var broken = false;。在each内,return false;之前,添加broken = true;。然后在您的each代码后添加if( broken) return false;

答案 2 :(得分:1)

喜欢那个?

function validate() {
    var pass = true;
    $('.var_txt').each(function() {
        if ($.trim($(this).val()) == '') {
            $(this).focus();
            pass = false;
            return false;
        }
    });

    if (!$(".answer:checked").val()) {
        alert("boom");
        pass = false;
        return false;
    }
    return pass;
}

添加一个变量,检查条件是否为真。