2012-03-11 116 views
0

我在寫一些jQuery時遇到了一些邏輯問題。我懷疑我的全局變量有問題,但我不確定問題是什麼。我正在記錄所有正在運行的文件,出於某種原因,在我的rollDown()函數中,儘管我使用的是id++,但我的全局變量id未更新(如日誌所示)。JavaScript全局變量不更新

我需要更新我的全局變量,以便當我點擊header > a時,else if語句將運行而不是再次觸發rollDown()

下面是相關代碼:

var id = 0; 
var animSpeed = 0; 
var animDelay = 0; 
var working = 0; 
var items = 0; 

function logs() { 
    "use strict"; 
    console.log('id: ' + id); 
    console.log('-----'); 
    console.log('animSpeed: ' + animSpeed); 
    console.log('-----'); 
    console.log('animDelay: ' + animDelay); 
    console.log('-----'); 
    console.log('working: ' + working); 
    console.log('=============='); 
} 

function rollDown(items, id) { 
    "use strict"; 
    var dist = $('li').eq(id).outerHeight(), slideDown = {'margin-top' : '+=' + dist + 'px'}; 
    console.log('items: ' + items + ' & id: ' + id); 
    if (id <= items) { 
     if (id === 0) { 
      $('#toggle').html('Hide &uarr;'); 
     } 
     $('li').not($('li').eq(id).prevAll()).delay(animDelay).animate(slideDown, animSpeed); 
     id++; 
     logs(); 
     rollDown(items, id); 
    } else { 
     console.log('herp derp'); 
     logs(); 
    } 
} 

function getVals() { 
    "use strict"; 
    animSpeed = $('#speed').val(); 
    animDelay = $('#delay').val(); 
} 

function resetPosition() { 
    "use strict"; 
    $('li').stop().css('margin-top', 0); 
    id = 0; 
    working = 0; 
    $('#toggle').html('Show &darr;'); 
} 

$(function() { 
    "use strict"; 
    $('header > a').click(function() { 
     if (id === 0 && working === 0) { 
      getVals(); 
      items = $('ul').children().length; 
      var z; 
      for (z = 0; z < items; z++) { 
       $('li').eq(z).css('z-index', items - z); 
      } 
      working = 1; 
      rollDown(items, id); 
     } else if (id !== 0) { 
      resetPosition(); 
      alert('!!'); 
     } 
     return false; 
    }); 
}); 

這裏是我的控制檯打印出:

items: 6 & id: 0 
id: 0 
----- 
animSpeed: 410 
----- 
animDelay: 20 
----- 
working: 1 
============== 
items: 6 & id: 1 
id: 0 
----- 
animSpeed: 410 
----- 
animDelay: 20 
----- 
working: 1 
============== 
items: 6 & id: 2 
id: 0 
----- 
animSpeed: 410 
----- 
animDelay: 20 
----- 
working: 1 
============== 
items: 6 & id: 3 
id: 0 
----- 
animSpeed: 410 
----- 
animDelay: 20 
----- 
working: 1 
============== 
items: 6 & id: 4 
id: 0 
----- 
animSpeed: 410 
----- 
animDelay: 20 
----- 
working: 1 
============== 
items: 6 & id: 5 
id: 0 
----- 
animSpeed: 410 
----- 
animDelay: 20 
----- 
working: 1 
============== 
items: 6 & id: 6 
id: 0 
----- 
animSpeed: 410 
----- 
animDelay: 20 
----- 
working: 1 
============== 
items: 6 & id: 7 
herp derp 
id: 0 
----- 
animSpeed: 410 
----- 
animDelay: 20 
----- 
working: 1 
============== 

回答

4

id作爲rollDown方法簽名中定義的參數。如果你刪除它,你的全局變量將會正確更新。

來源:

function rollDown(items, id) { 

要:

function rollDown(items) { 

您也可能要刪除items,因爲這也是在全局命名空間中定義。

+0

** + 1 **可能是有益的注意,使用全局命名空間是不是做的最好的事情。 – gdoron 2012-03-11 13:58:09

0

當你進入你的函數變量,名字id就像這樣:function rollDown(items, id)你運行全局變量。

使用:

function rollDown(items){