我需要动态地向js对象添加属性,这是我通过eval()实现的:
$ ->
#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获取输入。
答案 0 :(得分:8)
使用object['key']
表示法
attributes[$(this).attr('id')] = $(this).val();
使用以下方法创建对象也非常有效:
var attributes={};
编辑:沿着类似的行可以用相同的符号编写jquery方法
attributes[$(this)['attr']('id')] = $(this)['val']();