2011-07-06 30 views
3

準備ができているときとブラウザウィンドウのサイズを変更したときに呼び出すことができるjquery関数を作成しようとしています。jqueryを使用してブラウザのサイズを変更した後の変数をリセット

jQuery(document).ready(function($) { 

function setWidth() { 
    var windowWidth = $(window).width(); 
    var boxWidth = $('#addbox').width(); 
    var paddingWidth = (windowWidth - boxWidth)/2; 
}; 

$(setWidth); 

$(window).resize(setWidth); 

$(".scroll").click(function(event){  
    event.preventDefault(); 
    $('html,body').animate({scrollLeft:$(this.hash).offset().left-paddingWidth}, 750); 
}); 

});

しかし、このコードは動作していないようですが、firebugによるとpaddingWidthは定義されていません。私は間違って何をしていますか?

+0

を試してみてください?あなたが宣言した方法では、関数 'setWidth'内でのみスコープされています。 – FishBasketGordo

+0

申し訳ありませんが、私はすべてのコードを含んでいませんでした。それを修正すると、スコープ全体を見ることができます。 – bswinnerton

答えて

5

変数には、定義された範囲(varを使用)が含まれます。あなたの場合、これはsetWidthの中でのみ定義され、そのメソッドの実行ごとに再初期化されることを意味します。

子孫スコープ内の関数がその値にアクセスできるように、それらを包含スコープに移動する必要があります。

jQuery(document).ready(function ($) { 
    var windowWidth, boxWidth, paddingWidth; // declare variables in this scope 

    function setWidth() { 
     windowWidth = $(window).width(); // set variables in this scope 
     boxWidth = $('#addbox').width(); 
     paddingWidth = (windowWidth - boxWidth)/2; 
    }; 

    setWidth(); // just call the function 

    $(window).resize(setWidth); 

    $(".scroll").click(function (event) { 
     event.preventDefault(); 
     $('html,body').animate({ 
      scrollLeft: $(this.hash).offset().left - paddingWidth 
     }, 750); 
    }); 
}); 

$(setWidth)は、奇数の呼び出しであり、比較的高価なものです。それは、 "setWidthと書類が準備ができたら"と言う。あなたはjQuery(document).readyハンドラに入っているので、それは本当であると確信することができます。 setWidth()で関数を実行することができます。

+0

多くの感謝!それは最高です。 – bswinnerton

1

は、あなたが `paddingWidth`にアクセスしようとしているものの範囲では、この

jQuery(document).ready(function($) { 

var paddingWidth = 0; 

function setWidth() { 
    var windowWidth = $(window).width(); 
    var boxWidth = $('#addbox').width(); 
    paddingWidth = (windowWidth - boxWidth)/2; 
}; 

$(setWidth); 

$(window).resize(setWidth); 

$(".scroll").click(function(event){  
    event.preventDefault(); 
    $('html,body').animate({scrollLeft:$(this.hash).offset().left-paddingWidth}, 750); 
}); 
関連する問題