我有一个用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不会返回到父级。这似乎并没有把它写到相应的行。我在这里缺少什么..
答案 0 :(得分: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;
});