2012-11-29 46 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>