将属性动态分配给 JS 对象
我需要为一个 js 对象动态添加属性,这是我通过 eval() 实现的:
I needed to dynamically add properties to an js Object, which I achieved via 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()
很尴尬,有没有办法让这个更漂亮"?我的意思是,我搜索了像 eval()
这样的替代方法a href="http://api.jquery.com/serializeArray/" rel="nofollow">Jquery .serializeArray() 但它似乎只适用于查询表单,我需要从那个 #address_fields
div.
This works perfect but I feel awkward with the eval()
, is there anyway to do this "prettier"? I mean, I searched for alternatives like the Jquery .serializeArray() but it seems to work only with a queried form and I need to get the inputs from that #address_fields
div.
推荐答案
使用 object['key']
表示法
attributes[$(this).attr('id')] = $(this).val();
使用以下方法创建对象也非常有效:
It's also very efficient to create object using:
var attributes={};
类似的行可以用相同的符号编写 jquery 方法
Along similar lines can write the jquery methods in same notation
attributes[$(this)['attr']('id')] = $(this)['val']();
相关文章