объединение двух переменных для установки новой переменной в уже объявленную переменную с использованием JavaScript - PullRequest
2 голосов
/ 19 января 2012

Я пытаюсь установить для новой переменной то же значение, что и для уже объявленной переменной, объединяя две переменные, которые вместе составляют имя исходной переменной ... Это может показаться странным, поэтому вот пример:

// 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 было записано в документе ... есть ли способ сделать это?Я знаю, что это, вероятно, неправильный способ даже начать думать об этом, я просто использовал это как синоним того, что я пытался сделать.

Спасибо за вашу помощь.

Ответы [ 4 ]

4 голосов
/ 19 января 2012

Я не знаю, почему вы делаете это, но да, это возможно, используя метод eval.

Попробуйте это

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

document.write (eval(finalVar));

DEMO

4 голосов
/ 19 января 2012

Если это глобальные переменные, вы можете сделать это так:

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

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

Это работает только потому, что все глобальные переменные на самом деле являются свойствами объекта window, и вы можете ссылаться на свойства объекта окна как window.position или window["position"]. Поскольку последний работает, вы также можете создать строку "position", используя строковые операции, как в примере выше.

Я бы спросил, зачем ты это делаешь? Одна из распространенных причин, по которой люди просят это сделать, заключается в том, что они могут обращаться к переменным, таким как position1, position2 и т. Д. Если это так, то лучшим ответом будет использование массива, к которому может обращаться индекс:

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

document.write(positions[3]);

Вы можете получить доступ к значениям массива через переменную, например, так:

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

document.write(positions[pos]);

Или, чтобы перебрать весь массив:

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

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

Если вы описываете реальную проблему, которую вы пытаетесь решить, мы можем порекомендовать лучший способ ее решения. То, о чем вы сейчас спрашиваете, звучит как неправильный подход к решению практически любой проблемы.

1 голос
/ 19 января 2012
var position = 'top';
var pos = "posi";
var tion = "tion";
var finalVar = pos+tion;

alert(window[finalVar]); // better that `eval()`
document.write(window[finalVar]);
0 голосов
/ 19 января 2012

используйте это при объединении ваших переменных parseInt (pos) + parseInt (ition) не забудьте объявить строковые переменные pos и ition ... :)

...