2012-07-23 3 views
0

У меня есть небольшой вопрос. Что я хочу сделать, это сделать переменную InnerHTML.Использовать var как имя var в javascript

Может быть код объясняет это лучше, чем я есть сейчас:

----- Javascript -----

var VarOne = 'Four';   
var VarTwo = 'Five'; 
var VarThree = 'Six'; 


function MyFunction(){ 
document.getElementById("MyDiv").innerHTML = ['Var' + event.target.id]; 
    } 

----- Html ---- -

<div id="MyDiv"></div> 

Вместо поиска var это дает результат VarOne, VarTwo или VarThree, очень логично, но как я могу это сделать, поэтому он использует var?

ответ

2

Вместо использования строки в качестве имени переменной напрямую, положить значения в хэш:

var Vars = { 'One': 'Four', 'Two': 'Five', 'Three': 'Six' };   


function MyFunction(){ 
    document.getElementById("MyDiv").innerHTML = Vars[event.target.id]; 
} 
+0

+1 для использования объекта, поскольку я полностью забыл, что 'event.target' является элементом HTML, а его' id' обычно не является целым числом. – Blender

2

Переменные в области по умолчанию находятся в объекте window. Вы должны быть в состоянии сделать:

var id = 'One' 
var VarOne = 'Four'; 
var VarTwo = 'Five'; 
var VarThree = 'Six'; 

alert(window["Var" + id]); // => Four 

Таким образом, вы просто должны быть в состоянии изменить содержимое вашей MyFunction функции, чтобы быть:

document.getElementById("MyDiv").innerHTML = window['Var' + event.target.id]; 
0

Теперь, я не эксперт JavaScript, но, возможно, eval() будет делать что ты хочешь?

var results = eval('Var' + number); 

В качестве альтернативы вы могли бы создать массив и получить доступ к своим данным таким образом.

+1

+1, прежде всего потому, что только потому, что он предположил, что eval не означает, что он должен быть отключен по умолчанию. Это очень разумное решение, особенно если переменная не находится в глобальной области. – Lusitanian

+0

Разве это не зависит от того, откуда «номер»? Если он определен пользователем, это кажется ошибкой. –

+1

@ Лузитан: Я не знаю, что это разумное решение. Организация данных, с тем чтобы их можно было получить без eval, должно быть возможным и не слишком много работать почти во всех случаях. Если у вас нет что-то вроде REPL, не обязательно будет eval. – Thilo

1

Более безопасная версия и более структурированная версия может включать в себя что-то вроде:

var DivContents = { 
    VarOne : "Four", 
    VarTwo : "Five", 
    VarThree : "Six" 
}; 


function MyFunction(){ 
    document.getElementById("MyDiv").innerHTML = DivContents['Var' + event.target.id]; 
} 
4

While Ответ Джонатана правильный, вы должны избегать загрязнения объекта окна переменными.

Рассмотрим рефакторинг использовать объект для хранения этих значений:

var values = {one:'four', two:'five', three:'six'}; 

function MyFunction(){ 
    document.getElementById("MyDiv").innerHTML = values[event.target.id]; 
} 

Это оставляет только одну переменную в окне объема (который также можно избежать с помощью замыкания).

Смежные вопросы