2010-02-13 21 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()確實是合適的方法嗎?

非常感謝!

編輯:@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 2010-02-13 21:21:54

+0

無視我的文章編輯,我得到它的工作,感謝一百萬!!!!! -Jason – Jason 2010-02-13 21:26:15

+0

使用散列的美妙之處在於你可以根據你的示例代碼在循環中填充它: 'object_map [type] = new GIcon(baseIcon); object_map [type] .image = image_base_url + type +「。png」;' – DVK 2010-02-13 21:30:15

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 2010-02-13 21:14:15

+0

@DVK - 我假設這些對象是在jQuery ready函數中創建的。 – ChaosPandion 2010-02-13 21:15:28

相關問題