2015-01-16 70 views
0

我想做一個for循環在JavaScript與變量來指定增量。 以下函數使用DIV的先前值(oldVal)和其已更改爲(newVal)的值來更改另一個DIV中顯示的總數(curtot)。JavaScript的循環沒有結束

function spinctrltotaling(sender, newVal) { 
     var curtot = Number(document.getElementById("totaling").innerHTML); 
     console.log(curtot); 
     var transtot = 0; 
     var ld = ""; 
     var oldVal = sender.GetOldValue(); 
     console.log(oldVal); 
     if (newVal - oldVal >= 0) { 
      ld = "i=i+1"; 
     } else { 
      ld = "i=i-1"; 
     } 
     ; 
     console.log(ld); 
     for (i = oldVal; i <= newVal; ld) { 
      console.log(i); 
      if (i <= 0 & ld == "i=i+1") { 
       transtot = transtot - (i + 1); 
       console.log("i <= 0"); 
      } else if (i < 0 & ld == "i=i+1") { 
       transtot = transtot + i; 
       console.log("i < 0"); 
      } else if (i >= 0 & ld == "i=i+1") { 
       transtot = transtot - (i - 1); 
       console.log("i >= 0"); 
      } else { 
       transtot = transtot + i; 
       console.log("else"); 
      } 
     } 
     ; 
     if (curtot - transtot < 0) { 
      sender.SetCurrentValue = oldVal; 
     } else { 
      document.getElementById("totaling").innerHTML = transtot; 
      document.getElementById("debuging").innerHTML = "curtot=" + curtot 
        + " oldVal=" + oldVal + " newVal=" + newVal 
        + " transtot=" + transtot; 
     } 
     ; 
} 

控制檯結果:

0 
0 
"i=i+1" 
0 
"i <= 0" 
1 
"i >= 0" 

這裏有兩個問題:

  1. 的IF ELSE顯示了三個控制檯,而不是一個我期待的四種可能的結果。
  2. 循環不會結束,即使應該只循環一次。

我知道我犯了一個愚蠢的錯誤,但看不到它。

回答

0

你需要知道你是否要遞增或遞減的迭代器在你的for循環。那麼,你需要這樣做。所以,像這樣:

if (newVal - oldVal >= 0) { 
    for (i = oldVal; i <= newVal; i++) { 
     ... 
    } 
} else { 
    for (i = oldVal; i >= newVal; i--) { 
     ... 
     } 
}; 

沒有必要亂用「ld」。

+0

謝謝。然後每個循環將有一個IF ELSE而不是四個。 –

1

1)請解決問題2,如下所述,然後重拍你的測試... :-)

2)之所以循環還沒有結束的是你不增加循環變量i ...

for (i = oldVal; i <= newVal; ld) { 

大概應該是:

for (i = oldVal; i <= newVal; i++) {