Dynamically assign properties to a JS object(将属性动态分配给 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']();
这篇关于将属性动态分配给 JS 对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将属性动态分配给 JS 对象
基础教程推荐
- 动态更新多个选择框 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 悬停时滑动输入并停留几秒钟 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01