2012-10-29 85 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