我有以下内容:
var element = $(this);
var divName = element.parents("div:eq(0)").attr("name");
$.each(boxInfo,function(i,n) {
if( n.boxName == divName )
{
var newHeight = n.boxHeight;
}
});
clicked.parents("div:eq(0)").animate({
height: newHeight + 'px'
}, 1000);
问题是“newHeight undefined”。但如果我这样做:
var element = $(this);
var divName = element.parents("div:eq(0)").attr("name");
$.each(boxInfo,function(i,n) {
if( n.boxName == divName )
{
alert(n.boxHeight);
var newHeight = n.boxHeight;
}
});
clicked.parents("div:eq(0)").animate({
height: newHeight + 'px'
}, 1000);
它返回高度。如何确定变量的5行未定义?
答案 0 :(得分:4)
名为newHeight的变量是在匿名函数(作为参数传递给$.each
的函数)中声明的。这意味着它的值仅在该匿名函数中可用。这个概念叫做scope。它解释了为什么你的变量在匿名函数之外是未定义的。
如果您更改了代码以在更广泛的范围内声明变量,那么您的代码将按预期运行。观察:
var element = $(this);
var divName = element.parents("div:eq(0)").attr("name");
var newHeight;
$.each(boxInfo,function(i,n) {
if( n.boxName == divName )
{
newHeight = n.boxHeight;
}
});
clicked.parents("div:eq(0)").animate({
height: newHeight + 'px'
}, 1000);
答案 1 :(得分:0)
newheight的范围仅限于您应用于每个boxinfo的匿名函数。你需要在newheight之前删除var以使其成为全局变量。
另外,您的代码效率不高,因为您似乎正在使用each()来执行jquery可以为您执行的操作,例如,$(boxInfo).find('[boxName=' + divName + ']')