【问题标题】:How to 'return false' within a method?如何在方法中“返回错误”?
【发布时间】:2011-02-08 17:30:53
【问题描述】:

我在 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
};

【问题讨论】:

  • 您的分号错误。不要在块之后放置分号。

标签: jquery validation


【解决方案1】:

.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

【讨论】:

  • return returnValue 应该是return truereturn undefined
  • @Raynos:你确定吗?如果最里面的 if() 成功,我很确定 OP 想要从带有 false 的外部函数返回。不过我可能错了。
  • @patrickdw 您作弊并将return returnValue 语句移到$.each 之外,这更有意义。在$.each 函数中尝试return (returnValue = false)
  • @Raynos:是的,我正要提一下,也许你指的是我之前的笨拙错误。顺便说一句,我保留作弊的权利,只要它可以帮助我看起来不那么愚蠢。 ;o)
【解决方案2】:

采用@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;

我不建议你折磨维护者并编写像上面那样真的滥用循环的代码。

【讨论】:

  • 您需要使用first-child(这恰好是我从OP's earlier question 得到的答案)。而且只要你在清理东西,你还不如使用this.value 而不是使用.val()
  • @patrickdw this.value & .val() 在语义上是不同的。 .val() 做了一些奇怪的事情,我宁愿在不知道inputtype 的情况下尝试确定替换是否安全
  • 好点。它们只是文本输入,因此很安全。我认为 .val()input 元素的唯一修复是在 type='radio' 上,其中 Safari 存在一些问题。
  • 这是对迄今为止未公开的相关细节的及时利用......或作弊。 :o)
【解决方案3】:

return false 应用于“每个”回调。您想将其应用于“点击”回调吗?如果是这样,那么这样做:

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

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

    return returnValue;
}

【讨论】:

    猜你喜欢
    • 2017-06-08
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2020-08-06
    相关资源
    最近更新 更多