3

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_fieldsdiv から入力を取得する必要があります。

4

1 に答える 1

8

使用object['key']表記

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

以下を使用してオブジェクトを作成することも非常に効率的です。

var attributes={};

EDIT:同様の行に沿って、jqueryメソッドを同じ表記で書くことができます

   attributes[$(this)['attr']('id')] = $(this)['val']();
于 2012-10-29T04:38:19.117 に答える