如何在方法中“返回false”?

时间:2011-02-08 17:30:53

标签: jquery validation

我在click()之后运行这个循环,如果return false放在迭代器的更深处,它就不会return false。我怎样才能确保它返回false; ?

$.each($(".payment"), function(key, value) { 
  the_date = $(value).children("input:first").val();
  if( the_date != "") {
    if( the_date.split("/").length != 3) {
      return false; // <---  This doesn't work 
    };
  };
};

这是另一个有效的验证器

if( $("input#date_awarded").val().split("/")[2] > 2010 ) {
  return false; // <-- Totally works
};

3 个答案:

答案 0 :(得分:3)

.each()中,从每个回调中返回return false,并停止循环。

相反,您可以使用变量来保存返回值,并在循环之后返回该值。

var returnValue = true; //use a variable for the return value
$.each($(".payment"), function (key, value) {
    the_date = $(value).children("input:first").val();
    if (the_date != "") {
        if (the_date.split("/").length != 3) {
            returnValue = false; // set the return value
            return false; // break the loop
        }
    }
});
return returnValue; // return the return value

答案 1 :(得分:1)

使用@patrickdw代码示例修复您的错误,然后清理您的代码。

var returnValue = true; 
$.each($(".payment>input:first-child"), function (key, value) {
    if (this.value.split("/").length !== 3) {
        return (returnValue = false);
    }
});
return returnValue; 

或仅仅是为了踢,让我们在一行for循环中重做它而不需要一个体块。

for (var returnVal = true, var i = 0, var inputs = $(".payment>input:first-child"), var text = $(inputs[i]).val(); i < inputs.length && ((text.split("/").length !== 3 && (returnVal  = false)) || true); text = $(inputs[++i]).val());
return returnVal;

我不建议你折磨维护者并编写如上所述真的滥用循环的代码。

答案 2 :(得分:0)

return false适用于'each'回调。你想将它应用于'click'回调吗?如果是这样的话就这样做:

jQuery(selector).click(function() {
    var returnValue = true;

    jQuery(anotherSelector).each(function() {
        do_stuff();
        returnValue = false;
    }

    return returnValue;
}