2012-01-19 239 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]); 
相关问题