2010-02-13 1 views
2

Я бы в идеале хотел бы создать обтекаемый интерфейс, который требует от пользователя, чтобы выбрать один из трех переключателей, как показано здесь:Преобразование строки в объект JavaScript - есть ли более безопасный способ использования eval?

<form id="icon-type"> 
    <input type="radio" name="icon" value="apples" /> Apples 
    <input type="radio" name="icon" value="oranges" /> Oranges 
    <input type="radio" name="icon" value="graphes" /> Grapes 
</form> 

Использование JQuery легко определить, какой из трех были выбраны:

var iconType = $('input[name=icon]:checked').val(); 

Однако мне нужно преобразовать строку, назначенную iconType, в ранее созданный объект с тем же именем. Я читал, что eval() - лучший способ сделать это, но также столкнулся с многочисленными предупреждениями о том, что eval() никогда не должен использоваться. Однако, похоже, нет другого способа выполнить это преобразование. Таким образом, мой вопрос: хотя я признаю, что eval(), безусловно, может быть неправильно использован, это случай, когда eval() действительно подходит?

Мысли очень ценим!

EDIT: @DVK, спасибо! Тем не менее, все еще немного потеряно; Предположим, мои объекты выглядеть следующим образом:

var apple = new GIcon(baseIcon); 
apple.image = "http://localhost/images/apple.png"; 

var orange = new GIcon(baseIcon); 
orange.image = "http://localhost/images/orange.png"; 

Так что мне нужно, чтобы преобразовать значение, извлеченное из выбранной радиокнопки в соответствующую ссылку на объект. Как я могу хранить их в хеше, как вы объясните? Благодаря!

ответ

3

Для простых строк, как это, вы также можете просто хранить объекты соответсвующей в хэш, и доступ как этого

var obj = object_map[iconType];

+0

Большое спасибо за ответ, я все еще немного потерял. Я редактировал свое оригинальное сообщение, чтобы добавить немного кода. – Jason

+0

Не обращайте внимание на мое сообщение, я получил его на работу, спасибо миллион !!!!! -Jason – Jason

+0

И красота использования хэша состоит в том, что вы можете заполнить его в цикле на основе вашего образца кода: 'object_map [type] = new GIcon (baseIcon); object_map [type] .image = image_base_url + type + ".png"; ' – DVK

1
var obj = window[iconType] 

Вы также можете связать объект непосредственно со своим вводом.

$(function() { 
    var form = $("#icon-type"); 
    form.get(0).iconTypeObject = new Apples(); 
    form.get(1).iconTypeObject = new Oranges(); 
    form.get(2).iconTypeObject = new Grapes(); 
}); 

var iconObject = $('input[name=icon]:checked')[0].iconTypeObject; 
+0

@Chaos - Я думал, что OP сказал «ранее созданного», не «новый» объект? – DVK

+0

@DVK - Ну, я предполагаю, что объекты были созданы в функции jQuery ready. – ChaosPandion