2012-11-29 83 views
1

我有一個else..if語句,它將一個值賦給基於window.width的變量,我想要做的是在window.resize內使用此值,但在瞬間得到'undefined'currentSize的值。我應該怎麼做才能獲得價值?如何從調整大小函數內訪問變量值

JS

//Code ran onload 
if(windowWidth >= 924) { 
    incrementValue = 3; 
    currentSize = 'desktop'; 
} 
else if(windowWidth > 615 && windowWidth < 924) { 
    incrementValue = 2; 
    currentSize = 'tablet'; 
} 
else { 
    incrementValue = 1; 
    currentSize = 'mobile'; 
} 

$(window).resize(function() { 
    windowWidth = $(window).width(); 

    if(windowWidth >= 924) { 
     incrementValue = 3; 
     var newSize = 'desktop'; 
    } 
    else if(windowWidth > 615 && windowWidth < 924) { 
     incrementValue = 2; 
     var newSize = 'tablet'; 
    } 
    else { 
     incrementValue = 1; 
     var newSize = 'mobile'; 
    } 

    console.log(currentSize); //'undefined' 
    if (currentSize !== newSize) { 
     var currentSize = newSize; 

     incrementTotal = 0; 
     slideIndex = 0; 

     //Reset slider to start 
     $carouselSlides.css('left', 0); 
    } 
}); 
+0

你能請張貼代碼的更完整的版本?看看你如何定義windowWidth是很有用的。 –

+0

哪個變量是?根據你的代碼,'currentSize'應該是可見的,'incrementValue'和'slideIndex'都是隱含的全局變量(這是一件壞事)。很難說關於'windowWidth'的附加關係,儘管... –

+0

添加了額外的代碼,希望這有助於幫助 – styler

回答

3

不要var重新定義currentSize這樣

if (currentSize !== newSize) { 
    var currentSize = newSize; 

取出var

if (currentSize !== newSize) { 
    currentSize = newSize; 

下面是一個例子,它允許你複製或消除你錯誤取決於存在var

+1

這不是你所知道的Javascript的情況...... Javascript只知道函數的作用域,而不瞭解代碼塊的作用域。所以,如果你在'if'語句中聲明瞭你的變量,它將在整個函數範圍內都可見...... AFAIK在函數代碼塊中聲明的所有變量都被編譯到函數的頂部。確實,這種重新宣佈是非常糟糕的做法。 –

+0

感謝您的信息,我不知道!愛這樣;)。 –

+1

現在你已經找到了它。 'currentSize'重新定義實際上是個問題。 –

0

你的新尺寸超出範圍:

$(window).resize(function() { 
    windowWidth = $(window).width(); 
var newSize =0; 
    if(windowWidth >= 924){ 
     incrementValue = 3; 
     newSize = 'desktop'; 
    } else if(windowWidth > 615 && windowWidth < 924) { 
     incrementValue = 2; 
     newSize = 'tablet'; 
    } else { 
     incrementValue = 1; 
     newSize = 'mobile'; 
    } 

    if (currentSize !== newSize) { 
     var currentSize = newSize; 

     incrementTotal = 0; 
     slideIndex = 0; 

     //Reset slider to start 
     $carouselSlides.css('left', 0); 
    } 
    }); 
1
<script> 
//global scope 
var currentSize = 'desktop', incrementTotal = 0, incrementValue = 0, slideIndex = 0, $carouselSlides = $('#carouselSlides'); 

function windowResize(windowWidth) { 
    var data = []; 
    if (windowWidth >= 924) { 
     data = ['desktop', 3]; 
    } else if (windowWidth > 615 && windowWidth < 924) { 
     data = ['tablet', 2]; 
    } else { 
     data = ['mobile', 1]; 
    } 
    return data.length ? data : false; 
} 


$(window).resize(function() { 
    var windowWidth = $(this).width(); 
    var data = windowResize(windowWidth); 
    // data[0] = desktop, tablet OR mobile 
    // data[1] = 1, 2 OR 3 
    incrementValue = data[1]; 

    if (currentSize !== data[0]) { 
     currentSize = data[0]; 

     incrementTotal = 0; 
     slideIndex = 0; 

     //Reset slider to start 
     $carouselSlides.css('left', 0); 
    }  

    // set the style for the current screen size 
}); 
</script>