【问题标题】:jquery每个循环中的return false不会结束整个函数
【发布时间】:2022-01-23 07:06:36
【问题描述】:

jquery each loop中的return word好像不会结束整个函数。这是下面的代码。目的是,当数组中的值不是数字时,它应该停止所有函数,而不仅仅是循环。但事实证明它只会停止循环并继续下面的其他逻辑。

在 C# 或 Java 中,返回词将停止整个函数。 JavaScript中不是这样设计的吗?

function testMehtod() {
        var itemIds = [];
        $("#confirmOrderItemContainer").find(":checkbox:checked").each(function (i, o) {
            itemIds[i] = $(o).attr('item-id');
            if (isNaN(itemIds[i])) {
                return false;
            } 
        });

        //other logic ...
}

【问题讨论】:

  • 函数无法退出调用它的函数。 .each()只能停止自己的循环,不能从testMethod()返回。
  • return 语句只会通过返回指定值离开当前函数。在给定的示例中,它将结束 jQuery-each 方法中的每个匿名函数调用,并且对(外部)函数 testMehtod() 内的进一步执行没有影响。
  • @CarstenMassmann 它还将结束.each() 循环,因为它将return false; 视为循环中的break 语句。
  • 是的@Barmar,你是对的!我忘记了这是 jQuery 内置到其 .each() 方法中的那些古怪的附加功能之一 - 除了以相反的顺序回调参数:(index, element) 而不是 (element, index).map()
  • @CarstenMassmann 公平地说,jQuery 的 .map() 早于 EcmaScript 的版本。所以 ES5 交换了顺序。

标签: javascript jquery


【解决方案1】:

如果您需要捕获中断循环并返回 false:

function testMehtod() {
    var itemIds = [];
    var ret = true; // our flag variable with default value - everything is good
    
    $("#confirmOrderItemContainer").find(":checkbox:checked").each(function (i, o) {
        itemIds[i] = $(o).attr('item-id');
        if (isNaN(itemIds[i])) { // not good
            ret = false; // let set flag about it
            return false; // break $.each loop
        } 
    });
    if (ret === false) { // not good? let's leave function
        return false;
    }

    //other logic ...
}

【讨论】:

  • 谢谢。我就是这样做的。
猜你喜欢
  • 2015-07-16
  • 1970-01-01
  • 2019-11-05
  • 2015-11-23
  • 1970-01-01
  • 2016-12-21
  • 2016-11-02
  • 2015-08-05
  • 1970-01-01
相关资源
最近更新 更多