2012-03-11 35 views
0

jQueryに少し問題があります。私は自分のグローバル変数に何か間違っていると思うが、問題の内容が正確ではない。私は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

あなたはrollDownメソッドのシグネチャで定義されたパラメータとしてidを持って

はここに関連するコードです。これを削除すると、グローバル変数が正しく更新されます。

function rollDown(items, id) { 

へ:

function rollDown(items) { 

また、それはまた、グローバル名前空間で定義されている通り、itemsを削除することがあります。

+0

** + 1は**それはグローバルな名前空間を行うための最善のことではありません使用に注意することが役に立つかもしれません。 – gdoron

0

ここでのような名前のIDを持つ関数変数を取得すると、function rollDown(items, id)はグローバル変数で実行されます。

使用:。

function rollDown(items){ 
関連する問題