这个JQuery代码块有什么问题?
这个JQuery代码块有什么问题?
我有一些代码:
$(xml).find("strengths").each(function() { //代码 //如何根据条件退出这个块。 });
如何根据条件从"each"代码块中退出?
更新:
如果我们有类似这样的代码:
$(xml).find("strengths").each(function() { $(this).each(function() { //我想同时从两个each循环中退出。 }); });
是否可能从内部的"each"函数中同时退出两个"each"函数?
# 19.03.2013
如果你想继续而不是退出
return true;
问题原因:在这段JQuery代码中,通过在匿名函数中使用return false来尝试从循环块中返回,以根据某个条件来跳出循环。
解决方法:根据JQuery的文档,在each方法中使用return false将完全停止循环,类似于在普通循环中使用break。如果想要跳到下一个迭代,应该在循环中使用return true,类似于在普通循环中使用continue。因此,要解决这个问题,应该使用return true来实现跳到下一个迭代,而不是使用return false来尝试跳出循环。
整理后的文章如下:
在这段JQuery代码中,通过在匿名函数中使用return false来尝试从循环块中返回,以根据某个条件来跳出循环。然而,根据JQuery的文档,在each方法中使用return false将完全停止循环,类似于在普通循环中使用break。如果想要跳到下一个迭代,应该在循环中使用return true,类似于在普通循环中使用continue。因此,要解决这个问题,应该使用return true来实现跳到下一个迭代,而不是使用return false来尝试跳出循环。
这段jQuery代码的问题是什么?原因是该代码混淆了JavaScript和jQuery的概念。解决方法是将代码中的"JavaScript"替换为"jQuery"。
jQuery中的return false;
与JavaScript和PHP中的break;
有相同的作用,用于停止循环。而return true;
或return;
与PHP中的continue;
有相同的作用,用于继续循环。
在jQuery中,return false;
被解释为停止循环,而不是返回布尔类型,这与JavaScript和PHP中的用法有所不同。
因此,正确的写法应该是使用return false;
而不是return false;
。
这段代码的问题在于无法通过简单的"return"语句来中断循环,需要使用"return false"来实现。原因是在jQuery的each()方法中,如果回调函数返回非false的值,将会像for循环的continue语句一样跳到下一次迭代,而不是中断整个循环。
解决方法是在需要中断循环的地方使用"return false"语句。例如,在上述代码中,可以通过判断某个条件(例如iWantToBreak)来决定是否中断循环,代码可以修改为:
$(xml).find("strengths").each(function() { if (iWantToBreak) return false; });
需要注意的是,这种中断循环的方式并不会终止整个函数的执行,只会中断当前的each循环。如果希望在循环中检查必填字段后继续执行,可以使用一个变量(例如kill)在循环中设置,然后在循环外部读取该变量以决定是否返回。例如:
var kill = 0; $.each(array, function(index, value) { if (!requiredField(value)) { kill = 1; return false; } }); if (kill == 1) { return; }
这样就可以在循环中检查必填字段,如果有缺失则中断循环,并在循环外部根据kill变量的值来决定是否继续执行后续代码。