2012-10-29 128 views
3

我需要動態屬性添加到一個JS對象,這是我通過eval()函數來實現的: 動態分配性質的JS對象

$ -> 

    #Methods 
    window.add_address = (attributes, id=new Date().getTime())-> 
    $container = $('ul#addresses_list') 
    $unit = $('<li>') 

    $.each attributes, (key,value)-> 
     $input = $('<input type="hidden">') 
     $input.attr 'name', "contact[addresses_attributes][#{id}][#{key}]" 
     $input.val value 
     $unit.append $input 

    $container.append $unit 

    #Events 

    #Add address button 
    $('a#add_address').on 'click', (ev)-> 
    attributes = new Object 
    $('#address_fields').find('input').each -> 
     eval("attributes.#{$(this).attr 'id'}='#{$(this).val()}'"); 

    add_address attributes 

此作品完美,但我覺得彆扭與eval()是無論如何要做到「漂亮」?我的意思是,我搜索了像Jquery .serializeArray()這樣的替代方案,但它似乎只適用於查詢表單,我需要從#address_fields div獲得輸入。

回答

8

使用object['key']符號

attributes[$(this).attr('id')] = $(this).val(); 

這也是非常有效的使用來創建對象:

var attributes={}; 

編輯:按照類似的思路可以寫在同一符號的jQuery方法

attributes[$(this)['attr']('id')] = $(this)['val'](); 
+0

剛我在找什麼。這幾乎讓我對這個新手問題感到難過。謝謝! – nicooga

+0

沒問題..我們都有我們的學習曲線 – charlietfl