访问全局变量

时间:2012-02-03 08:38:19

标签: javascript jquery

我遇到这样的情况:

talenti = $(".talenti");
filtra = $(".filtra");
wrapNavHeight =  $("#wrapNav").outerHeight(true);
filtra.click(function(e) {
    e.preventDefault();
    $(".nasco").hide();
    $("#sliding-navigation").delay(delay).show();
    delay += 500;
    talenti.removeClass('opened');
    filtra.addClass('opened');
    filtra.attr('id',"focF");
    talenti.attr('id',"");
    if (filtra.hasClass("opened")) {
        $("#wrapNav").slideToggle("100", "linear", function(){
            alert(wrapNavHeight);
            $("#container").animate({"height": "+=wrapNavHeight"}, 100,function(){
                $(".box").animate({"top": "+=wrapNavHeight"});
            });
        });
    } 
});

我正在尝试获取wrapNavHeight但是警告(wrapNavHeight);输出null;然后无法将该值分配给下一个动画线

任何?

3 个答案:

答案 0 :(得分:2)

是不是只是在不可见的情况下为outerHeight赋值变量?我认为您需要在切换过渡后重新评估outerHeight。取代

alert(wrapNavHeight);

alert($("#wrapNav").outerHeight(true));

看看那是否更好?

答案 1 :(得分:0)

没有其他人真正解释过为什么会这样。这就是原因:

取决于:

  • 使用哪个对象作为"这个"用于调用包含上述所有代码的函数
  • 使用哪个对象作为"这个"调用从代码第4行开始定义的函数

在JavaScript中,"全球"引用实际上适用于当前this对象(或者#34; true"全局对象(Web浏览器中为window),如果不在函数内)

因此,如果我在上面指出的2个函数的this个对象不同,那么你就会得到你观察到的情况。

在浏览器中,默认的this对象通常为window,但在运行该函数时可以更改此对象,例如将其他参数传递给apply或通过调用作为一种方法的功能。

自从我认真使用jQuery以来已经过去了一年,但如果我没记错,jQuery事件处理程序通常会将this重新绑定到与事件相关的有用事物上(使用apply - 你也可以这样做)。

因此,假设外部函数this尚未绑定到window以外的任何特殊内容,只需将wrapNavHeight替换为window.wrapNavHeight in wrapNavHeight内在的功能,以达到你想要的效果。

(实际上,我不会这样做,但是,作为一种风格问题。只需在外部函数中声明var为{{1}},然后你就可以了。我会得到词汇范围。)

答案 2 :(得分:-1)