0

特定の Rails 4 フォームに新しいネストされた要素を追加したいと考えています。

コーヒースクリプト:

ready = ->
  $('form').on 'click', '.add_comment', (event) ->
    new_fields = $(this).parent().prev('div.field').clone()
    new_fields.insertBefore('p.new_comment_link')
    event.preventDefault()

$(document).ready(ready)
$(document).on('page:load', ready)

を行う前に、insertBefore内のいくつかの属性を変更したいと思いますnew_fields。の内容new_fieldsは次のとおりです。

<div class="field">
  <label for="post_comments_attributes_2_name">Name</label><br>
  <input id="post_comments_attributes_2_name" name="post[comments_attributes][2][name]" type="text">
  <input id="post_comments_attributes_2__destroy" name="post[comments_attributes][2][_destroy]" type="hidden" value="false">
  <a class="remove_category" href="#">remove</a>
</div>

[2] が 2 であることを知らずに、すべて[2]を +1 ( )に置き換えるにはどうすればよいですか? [3]任意の整数を指定できます。

4

2 に答える 2

0

この場合、入力の名前を変更するだけでなく、ラベルと ID も変更する必要があります。これは、これらの属性の分類法に依存するあらゆる種類の誤動作を防ぐためです。

CoffeeScript は次のようになります。

String.prototype.parseIntPlusOne = ->
  this.replace /(\d+)/, (match, num)->
    parseInt(num, 10) + 1

ready = ->
  $('form').on 'click', '.add_comment', (event) ->
    event.preventDefault()

    new_field = $(this).parent().prev('div.field').clone()

    new_field.find('label').attr 'for', (i, attr)->
      attr.parseIntPlusOne()

    new_field.find('input').attr('id', (i, attr)->
      attr.parseIntPlusOne()).attr('name', (i, attr)->
      attr.parseIntPlusOne())

    new_field.insertBefore('p.new_comment_link')

$(document).ready(ready)
$(document).on('page:load', ready)

そして、ここで実際の例を見ることができます: http://codepen.io/MarioRicalde/pen/AFLIe

于 2013-06-12T07:21:02.657 に答える