我在点击 add_fields 和 remove_fields 时成功地添加和删除了字段。但是现在我想根据父表单中下拉列表的值一次添加 N 次字段。 怎么做有什么想法吗? 这是我的 parent 表格
= f.select :total_section, (0..10),{}, :onchange => "generate_form(this.value)"
.field
= f.fields_for :score_sheet_sections do |s|
%div.fields
= render 'score_sheet_section_fields', :f => s
%div.fields
= link_to_add_fields "Add Score Sheet Sections", f, :score_sheet_sections
在我的生成表单函数中,我只有这个:
function generate_form(number) {
for (i = 1; i <= number; i++) {
console.log(i);
}
}
我想选择部分的数量(比如 N 或将其存储在 N 中)然后添加 score_sheet_sections N 次
最佳答案
select number of sections(say N or store it in N) and then add score_sheet_sections N times)
我不知道你目前是如何处理这个问题的,但如果你使用与 this 类似的方法(I.E 使用 Ajax 调用单独的方法) ,您可能希望在方法中包含一个参数,它允许您根据参数返回行数,如下所示:
--
路线
#config/routes.rb
resources :controller do
collection do
get :new_field
end
end
--
Controller
#app/controllers/your_controller.rb
respond_to :js, only: :new_field
def new_field num = 1 #-> arg defaults to 1
num = params[:num] if params[:num]
@model = Model.new
@model.nested_categories.build
render "controller/form", num: num
end
#app/views/controller/new_field.html.erb
<%= form_for @model do |f| %>
<%= render partial: "field", locals: { num: parmas[:num], f: f } %>
<% end %>
#app/views/controller/_field.html.erb
<% num.each do |i| %>
<%= f.fields_for :association, child_index: Time.now.to_i do |a| %>
<%= a.text_field :attribute %>
<% end %>
<% end %>
--
** JS **
= f.select :total_section, (0..10),{}, :onchange => "generate_form(this.value)"
#app/assets/javascripts/application.js.erb
var generate_form = function( num ){
$.ajax({
url: "new_fields/?num=" + num,
type: "GET",
success: function(data) {
//append returned data to view
}
})
}
- 根据 this SO post ,您可以将数据附加到
GET
请求中的 URL
这将向您的 ajax 请求返回一个构建的表单,允许您解析它并附加到 View
关于javascript - 动态添加字段到嵌套表单 onchange of select,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23863808/