javascript函数的返回值
我的javascript函数的返回值,javascript,jquery,function,return,Javascript,Jquery,Function,Return,我的$(document).ready(function(){}中有一段代码,内容如下: getInitial(len); 其中len是一个整数 function getInitial(number){ number--; if(number < 0) return var $items = $(balls()); $items.imagesLoaded(function(){ $container .masonry('re
$(document).ready(function(){}
中有一段代码,内容如下:
getInitial(len);
其中len是一个整数
function getInitial(number){
number--;
if(number < 0) return
var $items = $(balls());
$items.imagesLoaded(function(){
$container
.masonry('reloadItems')
.append( $items ).masonry( 'appended', $items, true );
});
getInitial(number);
}
我的问题是如何从balls()
函数中的imagesLoaded()方法获取ret
以返回到getInitial()中的$items
我希望没有更多的困惑。尝试以下方法:
var imgPreload = new Image();
var ret = '<div class="box" style="width:18%;">'
+'<p>'+$test[$iterator][1][2]['name']+'</p>'
+'<img src="'+imgPreload.src+'"/>'
+'<div id=boxBottom>'+Math.floor($test[$iterator][0]*100)+'%</div>'
+'</div>';
imgPreload.src = 'scripts/php/timthumb.php?src='+$test[$iterator][2]+'&q=100&w=300';
$(".imgHolder").append('<img src="'+imgPreload.src+'"/>');
//console.log(imgPreload);
$(".imgHolder").imagesLoaded();
return ret;
var imgPreload=new Image();
var ret=''
+“”+$test[$iterator][1][2][name']+'”
+''
+''+数学地板($test[$iterator][0]*100)+'%
+'';
imgPreload.src='scripts/php/timtumb.php?src='+$test[$iterator][2]+'&q=100&w=300';
$(“.imgHolder”)。追加(“”);
//console.log(imgPreload);
$(“.imgHolder”).imagesLoaded();
返回ret;
由于函数异步运行,因此需要回调函数。不能让它返回值。通过传递回调函数返回值
function getInitial(number){
number--;
if(number < 0) return
// Can't do the following, it's asynchronous
// var $items = $(balls());
// Do this instead
balls(function(html) {
var $items = $(html);
$items.imagesLoaded(function(){
$container
.masonry('reloadItems')
.append( $items ).masonry( 'appended', $items, true );
});
getInitial(number);
})
}
function balls(callback){
$iterator -= 1;
if($iterator < 0){
var $boxes = $( '<div class="box">No more games!</div>' );
$container.append( $boxes ).masonry( 'appended', $boxes, false );
return;
}
var imgPreload = new Image();
var ret;
imgPreload.src = 'scripts/php/timthumb.php?src='+$test[$iterator][2]+'&q=100&w=300';
$(".imgHolder").append('<img src="'+imgPreload.src+'"/>');
//console.log(imgPreload);
$(".imgHolder").imagesLoaded(function(){
callback('<div class="box" style="width:18%;">'
+'<p>'+$test[$iterator][1][2]['name']+'</p>'
+'<img src="'+imgPreload.src+'"/>'//Replace this with the one below when timthumb is whitelisted
+'<div id=boxBottom>'+Math.floor($test[$iterator][0]*100)+'%</div>'
+'</div>');
});
}
函数getInitial(数字){
数字--;
如果(数字<0)返回
//无法执行以下操作,它是异步的
//var$items=$(balls());
//改为这样做
球(函数(html){
var$items=$(html);
$items.imagesLoaded(函数(){
$container
.圬工(‘重新加载的项目’)
.append($items).砌石('appended',$items,true);
});
getInitial(数字);
})
}
函数球(回调){
$iterator-=1;
if($iterator<0){
var$box=$(“不再玩游戏!”);
$container.append($BOXS).MARCHISE('appended',$BOXS,false);
返回;
}
var imgPreload=新图像();
var-ret;
imgPreload.src='scripts/php/timtumb.php?src='+$test[$iterator][2]+'&q=100&w=300';
$(“.imgHolder”)。追加(“”);
//console.log(imgPreload);
$(“.imgHolder”).imagesLoaded(函数(){
回调(“”
+“”+$test[$iterator][1][2][name']+'”
+''//当timthumb被列入白名单时,将其替换为以下内容
+''+数学地板($test[$iterator][0]*100)+'%
+'');
});
}
回调是从异步函数返回值的方式
可能仍然存在问题,代码非常混乱。但这应该让您朝着正确的方向前进。好吧,它甚至不在函数中。到目前为止,返回根本不在函数中。但由于它是异步的,因此从该函数返回的东西无论如何都不会有帮助。没有进一步的上下文,很难提供帮助。@JTorres是的,如果这让任何人感到困惑,我很抱歉。
imagesLoaded
的回调函数似乎是异步的,在这种情况下,您不能立即返回值。@JTorres当别人的代码明显不完整时,我几乎不假设它的上下文。特别是对于异步代码,上下文是至关重要的。对于考试来说例如,Ricardo的回答忽略了异步性质,并立即返回HTML——这可能没问题,但它发生在加载图像之前,这是非常不同的行为。@DaveNewton我很清楚,否则为什么要在函数中使用它,我认为你太挑剔了。问题很清楚,ret为什么不这样做返回语句时包含正确的值reached@JTorres它确实回答了问题。您的答案无效。无法(同步)返回值如果异步获取值,则从函数返回。回调是从异步函数返回值的唯一方法。我确实尝试过此方法,但结果与我的OP是同一个问题,我已更新了我的OP,实际上是为了更好地澄清我的问题。为什么会被否决?这是正确的答案,至少在可能的范围内是正确的从原始问题中挖掘。+1抵消。@Adola你没有尝试过这个,我可以向你保证。你的示例仍然在调用balls()
,并且没有传递回调函数。重新阅读答案,并使用异步代码更新它。@DaveNewton谢谢你,即使在我们友好的讨论之后,你仍然表现出爱:)@JuanMends的区别在于ret
在加载图像之前接收它的值。在他的代码中,ret
在加载图像后接收它的值,但它已经返回。它看起来确实可以工作,因为在ret
中没有使用任何从imagesLoaded
处理程序设置的内容。那么为什么OP从imagesLoaded
调用它呢?
function getInitial(number){
number--;
if(number < 0) return
// Can't do the following, it's asynchronous
// var $items = $(balls());
// Do this instead
balls(function(html) {
var $items = $(html);
$items.imagesLoaded(function(){
$container
.masonry('reloadItems')
.append( $items ).masonry( 'appended', $items, true );
});
getInitial(number);
})
}
function balls(callback){
$iterator -= 1;
if($iterator < 0){
var $boxes = $( '<div class="box">No more games!</div>' );
$container.append( $boxes ).masonry( 'appended', $boxes, false );
return;
}
var imgPreload = new Image();
var ret;
imgPreload.src = 'scripts/php/timthumb.php?src='+$test[$iterator][2]+'&q=100&w=300';
$(".imgHolder").append('<img src="'+imgPreload.src+'"/>');
//console.log(imgPreload);
$(".imgHolder").imagesLoaded(function(){
callback('<div class="box" style="width:18%;">'
+'<p>'+$test[$iterator][1][2]['name']+'</p>'
+'<img src="'+imgPreload.src+'"/>'//Replace this with the one below when timthumb is whitelisted
+'<div id=boxBottom>'+Math.floor($test[$iterator][0]*100)+'%</div>'
+'</div>');
});
}