当我尝试return
来自使用$.each()
的函数的值时,我得到undefined
而不是值。但是当我直接从函数返回它时,它会找到值。奇怪的行为,我不熟悉如何解决。
我在这里做了一个小提琴,这是这个问题的一个例子: JS Fiddle
function returneach() {
$("b").each(function(i,v){
if(i==3) { alert('should be: ' + i); return i; }
});
}
alert('but returns: ' + returneach()); // <- undefined
我如何让它像它应该的那样工作?
答案 0 :(得分:2)
这里有两个嵌套函数。
内部函数内的return
不会导致外部函数返回。
使用变量并返回该变量:
function returneach() {
var r;
$("b").each(function(i,v){
if(i==3) r = i;
});
return r; // This will either return 3 or undefined
}
答案 1 :(得分:1)
或者你可以做这样的事情
function returneach() {
var allTags$ = $("b");
for(var i=0; i<allTags$.length; i++ ){
if(i==3) {
return i;
}
}
}
alert('but returns: ' + returneach());
答案 2 :(得分:0)
将索引分配给变量然后将其返回
function returneach() {
var ret;
$("b").each(function(i,v){
if(i==3) {
ret = i;
}
});
return ret;
}
alert('but returns: ' + returneach());
答案 3 :(得分:0)
很多时候,遍历集合涉及返回另一个集合或数组。这是显示
的updated fiddlefunction returneach() {
var arr = [];
$("b").each(function(i,v){
if(i==3 || i == 2) { console.log('should be: ' + i); arr.push(i); }
});
return arr;
}
console.log('but returns: ' + returneach());
根据评论的建议,使用$.map()
添加了功能。
function returneachWithMap(){
return $.map($('b'), function(i,v){
if(v==3 || v == 2) { console.log('should be: ' + v); return v; };
});
}
console.log('but returns: ' + returneachWithMap());
此外,帖子的标题并不反映您正在使用的代码。 $.each()
与$(selector).each()
不同。来自jQuery docs:
$ .each()函数与$(selector).each()不同,即 用于独占迭代jQuery对象。 $ .each() 函数可用于迭代任何集合,无论它是否为 对象或数组
答案 4 :(得分:0)
您必须从returneach()
function returneach() {
var retVal;
$("b").each(function (i, v) {
if (i == 3) {
alert('should be: ' + i);
retVal = i;
}
});
return retVal;
}
alert('but returns: ' + returneach()); // <- undefined