2014-04-17 120 views
0

我被困在這個問題上。我有這樣的代碼(字符串的形式爲:「VAR1,VAR2,VAR3」和someIdArray是包含一些ID的數組):將局部變量傳遞給另一個函數

function myFunction1(variable,string) 
    { 
    var myArray = string.split(','); 
    for (i=0;i<myArray.length;i++) 
    { 
    for (j=0;j<someIdArray[j].length;j++) 
     { 
     document.getElementById(someIdArray[j]).onclick=function() { myFunction2(variable,myArray[i]) }; 
     } 
    } 
    } 
function myFunction2(variable1,variable2) 
    { 
    alert(variable1); 
    alert(variable2); 
    } 

現在,當我點擊與someIdArray編號的元素,myFunction2運行,並且我將變量1放入myFunction1中,但變量2未定義。我怎樣才能確保我點擊的元素定義的onclick有固定的變量?

回答

1

試試這樣說:

function myFunction1(variable,string) 
{ 
    var myArray = string.split(','); 
    for (var i=0;i<myArray.length;i++) 
    { 
    for (var j=0;j<someIdArray.length;j++) 
    { 
     document.getElementById(someIdArray[j]).onclick=function() 
     { 
     var localI = i; 
     myFunction2(variable,myArray[localI]); 
     } 
    } 
    } 
} 
function myFunction2(variable1,variable2) 
{ 
    alert(variable1); 
    alert(variable2); 
} 

問題在你的代碼中,ij是全局變量,因爲你沒有添加var關鍵字。

所以你傳遞一個全局變量,將其增加到myArray.length該函數。

如果你這樣做myArray[myArray.length]你會得到undefined

我在上面的代碼中做的是存儲一個局部變量,它被封裝在onClick函數作用域中。

另一種方法是這樣的:

for (var i=0;i<myArray.length;i++) 
{ 
    for (var j=0;j<someIdArray.length;j++) 
    { 
     var myArrayIElement = myArray[i]; 
     document.getElementById(someIdArray[j]).onclick=function() 
     { 

     myFunction2(variable,myArrayIElement); 
     } 
    } 
} 

這裏你與來自myArray[i]值的變量,並把它傳遞給onClick功能,而不是傳遞i的功能。

0

的問題是你內心的循環:

for (j=0;j<someIdArray[j].length;j++) 

你可能想someIdArray.length而非j個元素的長度

+0

確實...但它仍然不能解決問題。 – Adam

+0

... aaaand這是一個錯字。抱歉! – vrugtehagel

0

你糾正這裏的代碼,這是範圍問題, 你已經做了兩件錯事, 1.你有someIdArray長度錯誤 2.有沒有指定數組元素,並傳遞到點擊事件

function myFunction1(variable, string) { 
    var myArray = string.split(','); 
    for (var i = 0; i < myArray.length; i++) { 
     var arrEle = myArray[i]; 
     for (var j = 0; j < someIdArray.length; j++) { 
      document.getElementById(someIdArray[j]).onclick = function() { 
       myFunction2(variable, arrEle); 
      }; 
     } 
    } 
} 

function myFunction2(variable1, variable2) { 
    alert(variable1); 
    alert(variable2); 
} 
相關問題