此代码
$(document).ready(function(){
var wBack = $('ul li.roundabout-in-focus').height();
var hBack = $('ul li.roundabout-in-focus').width();
var lback = $('ul li.roundabout-in-focus').css('left');
var tback = $('ul li.roundabout-in-focus').css('top');
});
function close_current(){
$('.nInfoIE').show();
$('.roundabout-in-focus').find('.img').show();
$('.roundabout-in-focus').css({position:'absolute',height:hBack,width:wBack,left:lBack,top:tBack});
$('.roundabout-in-focus').find('.iframe').css({'visibility':'hidden'});
$('ul li').find('.iframe').addClass('esconder');
$('ul li iframe').each(function(){
var tempurl = '';
tempurl = $(this).attr('src');
$(this).attr('src',tempurl.replace('?autoplay=1', ''));
});
watching = false;
$('.nInfoIE').hide();
}
通过firebug警告未定义hBack来提示错误,正如您所看到的那样是在document.ready上定义的,并且该函数在onClick元素上执行...
-edit -
甚至尝试在document.ready之前添加var wBack ,hBack,lback,tback = 0;
并删除document.ready中的单个'var'。
我错过了什么?
答案 0 :(得分:4)
您已经在
您可以通过明确地将它们设为window
属性来使它们可见:
window['hBack'] = whatever;
或者您也可以将“closeCurrent”函数放在“ready”处理程序中,只要它只由处理程序中的代码引用即可。
答案 1 :(得分:3)
总之,范围。在$(document).ready
函数之外声明变量以使它们进入全局范围,然后在函数内部设置它们。
var wBack, hBack, lback, tback;
$(document).ready(function () {
wBack = ...
答案 2 :(得分:2)
这是一个范围问题。
此处的其他答案在技术上可行,但如果您不需要全局,我绝不建议将这些变量保持全局。
您正在DOM-ready块中定义wBack
,hBack
,lBack
和tBack
,但您正尝试从事件处理程序访问它们。如果可以,请从元素中删除onclick
,并将其添加到DOM-ready块中以共享变量。
$(document).ready(function(){
// Store the selector
var element = $('ul li.roundabout-in-focus')
var wBack = element.height();
var hBack = element.width();
var lback = element.css('left');
var tback = element.css('top');
$("#someElement").click(function close_current(){
$('.nInfoIE').show();
$('.roundabout-in-focus').find('.img').show();
$('.roundabout-in-focus').css({position:'absolute',height:hBack,width:wBack,left:lBack,top:tBack});
$('.roundabout-in-focus').find('.iframe').css({'visibility':'hidden'});
$('ul li').find('.iframe').addClass('esconder');
$('ul li iframe').each(function(){
var tempurl = '';
tempurl = $(this).attr('src');
$(this).attr('src',tempurl.replace('?autoplay=1', ''));
});
watching = false;
$('.nInfoIE').hide();
})
});
你还应该将选择器缓存在该块的顶部(如我的例子中),以防止重复查询DOM(你也可以在点击处理程序中执行此操作,但选择器是不同的,所以我离开了单独的功能:)
希望有所帮助!欢呼声。答案 3 :(得分:0)
该变量仅在您传递给ready
函数的函数范围内定义。如果要引用它,则需要在全局范围内声明它。 (只需删除var
关键字)
答案 4 :(得分:0)
您的变量(wBack,hBack,lback和tback)只是在document.ready函数中定义的。没有全球性的。
为了能够在您的其他功能中使用它,您的变量必须是全局的。 您可以在变量之前删除'var',因为在javascript中,没有'var'的变量声明使变量成为全局变量。或者您可以手动将其声明为全局:
var wBack;
var hBack;
var lback;
var tback;
$(document).ready(function(){
wBack = $('ul li.roundabout-in-focus').height();
hBack = $('ul li.roundabout-in-focus').width();
lback = $('ul li.roundabout-in-focus').css('left');
tback = $('ul li.roundabout-in-focus').css('top');
});