2012-01-19 193 views
2

我想通過組合兩個變量,一起使原始變量的名稱設置一個新的變量與已經聲明的變量相同的值。這可能聽起來令人困惑,所以這裏有一個例子:結合兩個變量設置一個新變量使用javascript設置一個已經聲明的變量

// JavaScript Document 


document.write (finalVar); 

$(document).ready(function() 
{ 
var position_1 = $("#box_1").position(); 
var left_1 = position_1.left; 
var top_1 = position_1.top; 
var position_2 = $("#box_2").position(); 
var left_2 = position_2.left; 
var top_2 = position_2.top; 
var box; 
var boxLength; 
var boxNumber; 
var selected = 0; 


$("#box_1").click 
    (function() 
     { 
      if (selected == 1) // if a box is selected run the following 
       {  
        box = $(".selected").attr("id"); 
        boxLength = box.length; 
        boxNumber = box.charAt(boxLength-1); // finds the number of the box 
        alert(+boxNumber); 
       if (box == "box_1") // if the selected box is itself  then mimimise the box, remove the selected class from it and set selected to zero 
        { 
         $("#box_1").animate({height:50,opacity:0.8,left:left_1,top:top_1,borderRadius:4,MozborderRadiu s:4},(60),"swing").animate({width:50},(60),"swing").animate({opacity:0.6},(150),  function() 
         { 
           $(this).removeClass("selected"); 
         }); 
        selected = 0; 
        } 
       else 
        { 
         $(".selected").animate({height:50,opacity:0.8,left:left_+boxNumber,top:top_+boxNumber,borderRadius:4,MozborderRadius:4},(60),"swing").animate({width:50},(60),"swing").animate({opacity:0.6},(150),  function() 
         { 
          $(".selected").removeClass("selected"); 
          $("#box_1").animate({width:900,left:60,top:0,borderRadius:10,MozborderRadius:10},(60),"swing").animate({height:500},(60),"swing").animate({opacity:1},(150), function() 
           { 
            $("#box_1").addClass("selected"); 
           }); 
         } 
       );} } // end of function for if a box is selected 
      else // if no box is selected run the following 
       { 
        $("#box_1").animate({width:900,left:60,top:0,borderRadius:10,MozborderRadius:10},(60),"swing").animate({height:500},(60),"swing").animate({opacity:1},(150), function() 
         { 
          $("#box_1").addClass("selected"); 


         }); 
        selected = 1; 
       } 
     }); 

    $("#box_2").click 
    (function() 
     { 
      if (selected == 1) // if a box is selected run the following 
       {  
        box = $(".selected").attr("id"); 
        boxLength = box.length; 
        boxNumber = box.charAt(boxLength-1); // finds the number of the box 
        alert(+boxNumber); 
       if (box == "box_2") // if the selected box is itself then mimimise the box, remove the selected class from it and set selected to zero 
        { 
         $("#box_2").animate({height:50,opacity:0.8,left:left_2,top:top_2,borderRadius:4,MozborderRadius:4},(60),"swing").animate({width:50},(60),"swing").animate({opacity:0.6},(150), function() 
         { 
           $(this).removeClass("selected"); 
          selected = 0; 
         }); 
        } 
       else 
        { 
        $(".selected").animate({height:50,opacity:0.8,left:left_+boxNumber,top:top_+boxNumber,borderRadius:4,MozborderRadius:4},(60),"swing").animate({width:50},(60),"swing").animate({opacity:0.6},(150),  function() 
         { 
          $(".selected").removeClass("selected"); 
          $("#box_2").animate({width:900,left:60,top:0,borderRadius:10,MozborderRadius:10},(60),"swing").animate({height:500},(60),"swing").animate({opacity:1},(150), function() 
           { 
            $("#box_2").addClass("selected"); 
           }); 
         } 
       );} } // end of function for if a box is selected 
      else // if no box is selected run the following 
       { 
        $("#box_2").animate({width:900,left:60,top:0,borderRadius:10,MozborderRadius:10},(60),"swing").animate({height:500},(60),"swing").animate({opacity:1},(150), function() 
         { 
          $("#box_2").addClass("selected"); 
          selected = 1; 
         }); 
       } 
     }); 

}); 

話,我想5到寫入文件......有沒有這樣做的方法嗎?我知道這可能不是正確的方式,甚至開始考慮這樣做,我只是用它作爲我正在嘗試做的同義詞。

感謝您的幫助。

+0

爲什麼你會想要這樣做? – mrtsherman

+0

告訴我們您真正想要解決的問題,我們可以提供比您要求的更好的解決方案。 – jfriend00

+0

這是錯誤的 - 你能告訴我們你正在做什麼,我們可以告訴你正確的方法嗎? – Archer

回答

4

如果這些全局變量,你可以做這樣的:

var position = 4; 
var a = "posi"; 
var b = "tion"; 

document.write(window[a+b]); 

這僅是因爲所有的全局變量實際上是window對象的屬性,你可以參考window對象無論是作爲window.position的性質或window["position"]。由於後者的工作原理,您還可以使用字符串操作構建字符串"position",如上例所示。

我會問你爲什麼這樣做?一個常見原因有人問要做到這一點,使他們能夠訪問諸如position1position2等變量....如果是這樣的話,那麼更好的答案是使用可以通過索引訪問數組:

var positions = [1,4,67,99]; 

document.write(positions[3]); 
如果您所描述的現實問題

var positions = [1,4,67,99]; 

for (var i = 0; i < positions.length; i++) { 
    document.write(positions[i]); 
} 

您可以通過訪問變量數組值過這樣的:

var positions = [1,4,67,99]; 
var pos = 3; 

document.write(positions[pos]); 

或者,遍歷整個陣列上你正在努力解決,我們可以推薦最好的解決方法。你目前問到的問題聽起來像是對任何問題的錯誤處理方式。

+0

使用數組方法,我可以使用變量將值和訪問值存儲在數組中嗎? – simonthumper

+0

@simonthumper - 是的,可以通過變量訪問陣列位置。我在我的答案中加入了一個例子。 – jfriend00

+0

好吧,這工作!謝謝!只需要修復一些錯誤,就像第二個盒子返回到第一個盒子的位置,然後我完成了! – simonthumper

4

我不知道你爲什麼這樣做,但是可以使用eval方法。

試試這個

var position = 5; 
var pos = "posi"; 
var tion = "tion"; 
var finalVar = pos+tion; 

document.write (eval(finalVar)); 

DEMO

+1

'eval()'應該是最後的可能手段。機會是99.999%,比使用'eval()'有更好的方法來完成目標。當然,OP將不得不描述他們真正想要做什麼,以便我們知道推薦哪種更好的方法。 – jfriend00

+0

@ jfriend00 - 我同意你的看法,並且這取決於OP的情況。 – ShankarSangoli

+0

我正在嘗試創建一個網頁佈局系統,其中有左邊的框,當您單擊它們時,它們將展開以顯示文章...我也希望它能夠正常工作,因此當您單擊未打開的文本框時,打開的文章會關閉到它的盒子,新的一個打開。現在我可以通過爲每一個盒子寫一行代碼來實現這一點,但是我想讓它變得比這更簡單,所以我想要做的就是獲得擴展盒子的ID。剝離這個,直到我只有盒子的編號,然後將該值連接到短語left_或top_的末尾以將其返回到... – simonthumper

0

利用這一點的同時結合你的變量parseInt函數(POS)+ parseInt函數(銀行足球比賽) 不要忘記聲明字符串變量POS和銀行足球比賽... :)

1
var position = 'top'; 
var pos = "posi"; 
var tion = "tion"; 
var finalVar = pos+tion; 

alert(window[finalVar]); // better that `eval()` 
document.write(window[finalVar]); 
相關問題