2012-02-03 10 views
2

アクセス私はこのような状況に持っているグローバルなVAR

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)を取得しようとしています。ヌルを出力する。その値を次のアニメーション行に割り当てることはできません

誰でも?

+0

チェック ' $( "#wrapNav")。outerHeight(true); '、それは何を返しますか? 'wrapNav'は正しいですか? – davioooh

+0

#wrapNavは実際にはIDです。私はその値を警告でチェックすると、最初はdisplay:noneのようにnullを返します。しかし、私はslideToggleを使用しています。それを展開して表示して、そのコードの高さを定義して、上記のコードに従って警告を出しますが、何らかの理由でまだnullが返されます。 –

+0

David C.おそらく 'outerHeight()'は 'null'を返します。つまり空の要素セットで呼び出すことができます。つまり、'#wrapNav'は注目点(http://api.jquery.com/outerHeight/)を指しています。しかし、それはあなたが使用しているjQueryのバージョンにも依存するかもしれません - それに関連するいくつかのバグがありました。(これはhttp://bugs.jquery.com/ticket/7693) –

答えて

2

それはあなたが変数にそれが表示されていない時点でのouterHeightの値を代入しているだけのことではないでしょうか?私はあなたがトグル遷移後にouterHeightを再評価する必要があると思います。

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

alert(wrapNavHeight); 

を交換しているが、いずれかの方が良いですかどうかを確認?

+0

それは正しい値を返します。グローバルvarが上のwrapNavHeightを割り当てる理由は何ですか?それはアニメーションによって読み取られません。アニメーションポイント$( "#wrapNav")。outerHeight(真)(これは上のwrapNavHeightとして定義されています)は、あなたの提案を使用したときに警告が示す通りの値です –

+0

あなたがここで何をしようとしているか完全には分かっていませんwrapNavHeightを#containerの高さに追加しようとすると、次のようなことが起こります。 –

+0

var newHeight = $( "#container")。 –

0

これはなぜ実際に起こったのか説明していません。

それが依存:なぜここでのオブジェクトとして使用されている

  • を「この」オブジェクト「は、この」の呼び出しのために使用される
  • 上記のすべてのコードを含む関数の呼び出しについて関数は、関数内にない場合は、実際に現在のthisオブジェクト(または「真の」グローバルオブジェクト(Webブラウザでwindow)にまで適用する「グローバル」の参照、あなたのコードの行4のJavaScriptでは

から始まる定義されました)

このように、上記で指摘した2つの機能のオブジェクトが異なる場合は、あなたが観察した状況が発生します。ブラウザで

は、デフォルト thisオブジェクトは通常 windowですが、関数が実行されると、これは applyに異なるパラメータを渡すことによって、またはメソッドとしての機能を呼び出すことによってそのように、変更することができます。

は通常、(あなたもこれを行うことができますapply--使用して)イベントに関連する有益なものにthisを再バインド私は真剣にjQueryを使用するので年でしたが、私は右のリコール場合は、jQueryのイベントハンドラ。

ので、外側の関数のthiswindow以外の何か特別なことにバインドされていないが、単にあなたの所望の効果を達成するために、内部機能にwindow.wrapNavHeightwrapNavHeightを置き換えると仮定。

(実際には、私が実際にだけではなく、外側の関数内でvarとしてwrapNavHeightを宣言します。スタイルの問題として、しかし、これをしないだろう、そしてあなたはレキシカルスコープを取得します。)