【问题标题】:unable to break out of jquery each loop无法打破 jquery 每个循环
【发布时间】:2014-02-06 08:59:51
【问题描述】:

我有一个用 jquery 编写的嵌套循环,并在我的子循环中返回 false 不断将相同的文本附加到父行。我的代码,

$('#listingProducts ul.msRows li.msFullfillment').each(function(index) {                    
    if(typeof $('#hfOrd'+index).val() != 'undefined'){
        var $this = $(this);
        var orderId = $('#hfOrd'+index).val();                      
        // repainting logic
        $('body').append(data);
        $('#ajaxProducts ul.displayPoints li').each(function(index){
            var $child = $(this);
            if(typeof $('#hfAjaxOrderId'+index).val() != 'undefined'){
                var ajaxOrderId = $('#hfAjaxOrderId'+index).val();
                //alert(orderId+' '+ ' '+ajaxOrderId);
                if(ajaxOrderId === orderId){
                    // replace the div here..
                    var anchorText = $child.find("#pointsLineAjax .redeem").text();     
                    $this.find("#pointsLine .redeem").text(anchorText);
                    return false;
                }
            }
        });

    }
});

在子循环内返回 false 不会返回到父循环。那似乎没有将其写入相应的行。我在这里错过了什么..

【问题讨论】:

  • 什么是$('#hfOrd'+index).val()
  • 创建一个小提琴来检查发生了什么。
  • @ling.s 它是现有行中的 orderid,我正在与从 ajax 返回的具有 orderid 的行进行比较,如果两者相同,我将替换文本。
  • 你为什么使用 +index?
  • @ling.s 这就是它的含义,它只是将文本附加到文本以生成选择器:jsfiddle.net/jammykam/MBLrM

标签: jquery return iteration each


【解决方案1】:

返回false只在jQuery循环中跳出内循环,in this answer的原因有一个很好的解释。

这里的问题是,虽然您可以从内部返回 false .each 回调,.each 函数本身返回 jQuery 对象。 所以你必须在两个级别都返回一个 false 来停止迭代 循环。此外,由于无法知道内部 .each 是否找到 匹配与否,我们将不得不使用闭包来使用共享变量 会更新。

尝试以下方法:

$('#listingProducts ul.msRows li.msFullfillment').each(function(index) {                    
    var continueLoop = true;
    if($('#hfOrd'+index).length){
        var $this = $(this);
        var orderId = $('#hfOrd'+index).val();                      
        // repainting logic
        $('body').append(data);
        $('#ajaxProducts ul.displayPoints li').each(function(index){
            var $child = $(this);
            if($('#hfAjaxOrderId'+index).length){
                var ajaxOrderId = $('#hfAjaxOrderId'+index).val();
                //alert(orderId+' '+ ' '+ajaxOrderId);
                if(ajaxOrderId === orderId){
                    // replace the div here..
                    var anchorText = $child.find("#pointsLineAjax .redeem").text();     
                    $this.find("#pointsLine .redeem").text(anchorText);
                    continueLoop = false;
                    return false;
                }
            }
        });
    };
    return continueLoop;
});

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2021-08-29
    相关资源
    最近更新 更多