我有以下循环,它只是检查名为items的表中的所有“绿色”行,以查看哪一行包含一个名为xxx的隐藏输入元素,该元素与给定值不匹配:
$('table#items tr.green').each(function () {
if (myvalue != $('input#xxx', $(this)).val()){
alert('The xxx element is not the same as ' + myvalue + ' on all green rows');
return;
}
});
但是此代码下方有一个jQuery.ajax()
请求,即使显示警告框,jQuery.ajax()
仍会运行!知道为什么吗?
答案 0 :(得分:3)
请记住jQuery.each
将回调作为参数。你传给它一个匿名函数,并且在table#items tr.green
匹配的每个项目上调用此函数,因此所有return
都会从匿名函数返回。
您需要设置某种标志才能达到您想要的效果:
var flag = false;
$('table#items tr.green').each(function () {
if (myvalue != $('input#xxx', $(this)).val()){
alert('The xxx element is not the same as ' + myvalue + ' on all green rows');
flag = false;
}
});
if (flag)
{
return;
}
答案 1 :(得分:1)
你想要的是将函数返回到每个函数之外?你不能只返回每个内部,每个生成一个函数,你现在返回这个funktion关闭,循环仍然运行,你必须做这样的事情
var continue = true;
jQuery(bla).each(function(){
if(bla == blubb){
continue = false;
}
});
if(!continue){
return
}
答案 2 :(得分:0)
JQuery的.each
在提供的每个元素上运行传递的函数。因此,即使您决定从其中一个函数返回,它仍将执行所有剩余元素的函数。
如果要结束整个.each
调用,则需要在调用开始时检查一些变量,并跳过函数的处理。但是,您可以不停止JQuery为所有元素执行该函数,因为只返回了其中一个元素。
答案 3 :(得分:0)
代码中的返回从每个方法的内部回调返回。它不会从包含jQuery.each
的函数返回答案 4 :(得分:0)
当你返回时,你实际返回的是.each()执行的函数,其他迭代仍然会运行。相反,尝试使用与.ajax()调用相同范围内的标志。