2017-04-26 56 views
1

下面是我們正在努力做的:使用相同的變量2個功能在javascript

$(document).ready(function() 
     { 
      for (var i = 0; i < 10; i++) 
      { 
       for (var j = 0; j < 15; j++) 
       { 
        $('#Row'+(i+1)+'Sub' + (j+1) + '_ClientDropDown').ready(function() 
         { TrimServices_Function("Row" + (i+1) + "_Sub" + (j+1).ToString() + "_ClientDropDown"); }) 

       } 
      } 
    }) 

不幸的是,JavaScript並沒有真正通過i和j進入第二正常工作。當在做其他測試警報它將創建一個具有正確的初始呼叫一條線,但隨後另一部分只是返回10和15。因此,可以說線5分7將是:

$('#Row5Sub7_ClientDropDown').ready(function() 
    { TrimServices_Function("Row11_Sub16_ClientDropDown"); }) 

我們怎麼會去製作確定我們通過行和子匹配的行循環?

+1

它的正常工作。你正在創建一個閉包變量,每次通過循環改變它們的值。所以當函數稍後執行時,這些變量的值是捕獲這些變量的最終值,而不是函數傳遞給ready()時的值。這是關閉的正確行爲。 – RJM

+0

這是這個問題的答案:http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example – RJM

+0

用'let'替換for循環中的'var'。 – 2017-04-26 02:31:15

回答

0

設置第二個像這樣循環內的功能外兩個字符串(我也想清理你的字符串連接,但我離開它,你在這裏有它):

 for (var i = 0; i < 10; i++) 
     { 
      for (var j = 0; j < 15; j++) 
      { 
       var selectorA = '#Row'+(i+1)+'Sub' + (j+1) + '_ClientDropDown'; 
       var selectorB = "Row" + (i+1) + "_Sub" + (j+1).ToString() + "_ClientDropDown"; 

       $(selectorA).ready(function() 
        { TrimServices_Function(selectorB); }) 

      } 
     } 
+0

其他建議 - 不是從0循環到9或14,然後每次向i和j加1,分別從1循環到10和15。它會更乾淨。並選擇單引號或雙引號並使用它。不要來回切換。 – jfren484

+0

您是否檢查過這個以確保它能正常工作?我想在調用內部函數的時候,'selectorB'已經有了它的最後一個值。 – 2017-04-26 02:30:44

+0

是的,它的工作原理: https://jsfiddle.net/jfren484/z8q8rud0/ – jfren484

相關問題