错误变量没有定义,但在使用之前定义了

error var is not defined -but its defined before used-

本文关键字:定义 变量 错误      更新时间:2023-09-26

此代码

    $(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没有定义,正如您在文档中看到的那样。

编辑——

甚至试图在文档之前添加var wBack ,hBack,lback,tback = 0;。准备好并删除document.ready

中的单个'var'

我错过了什么?

您已经在"ready"处理程序函数中定义了变量。这意味着它们对该函数是私有的,在该函数之外不可见。

您可以通过显式地将它们设置为window属性来使它们可见:

  window['hBack'] = whatever;

或者你也可以把你的"closeCurrent"函数放在"ready"处理程序中,只要它只被处理程序中的代码引用。

一个词,范围。在$(document).ready函数外声明变量以使它们进入全局作用域,然后在函数内设置它们。

var wBack, hBack, lback, tback;
$(document).ready(function () {
    wBack = ...

这是一个范围问题。

这里的其他答案在技术上是可行的,但如果你不需要全局使用它们,我从不建议将这些变量保持全局。

您正在dom就绪块内定义wBack, hBack, lBacktBack,但是您正在尝试从事件处理程序访问它们。如果可以,请从元素中删除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重复(你可能可以在点击处理程序中这样做,但选择器是不同的,所以我留下了那个函数:)

希望有帮助!欢呼。

该变量仅在传递给ready函数的函数范围内定义。如果你想引用它,你需要在全局作用域中声明它。(只需删除var关键字)

您的变量(wBack,hBack,lback和tback)刚刚在您的文档中定义。准备功能。

为了能够在其他函数中使用它,变量必须是全局的。你可以删除变量前面的"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');
});