我正在尝试将 jquery-ui 日期选择器添加到我的应用程序的嵌套表单字段中,但是当我使用新字段更新 DOM 时,我没有让日期选择器显示在创建的字段上。这是我为该应用程序工作的代码。
<%= form_for(@load) do |f| %>
<%= f.error_messages %>
<%= f.fields_for :destinations do |builder| %>
<%= render "destination_fields", :f => builder %>
<% end %>
<p><%= link_to_add_fields " Add Destination", f, :destinations %></p>
<% end %>
_destination_fields.html.erb
============================
<fieldset>
<%= f.text_field :arrival_date, :placeholder => "From:", :class => "datepicker" %>
</fieldset>
添加字段的咖啡脚本:
jQuery ->
$('form').on 'click', '.add_fields', (event) ->
time = new Date().getTime()
regexp = new RegExp($(this).data('id'), 'g')
$(this).before($(this).data('fields').replace(regexp, time))
event.preventDefault()
添加字段的功能:
def link_to_add_fields(name, f, association)
new_object = f.object.send(association).klass.new
id = new_object.object_id
fields = f.fields_for(association, new_object, child_index: id) do |builder|
render(association.to_s.singularize + "_fields", f: builder)
end
link_to(name, '#', class: "add_fields btn btn-primary icon-plus", data: { id: id, fields: fields.gsub("\n",""), :class => "datepicker" })
end
我编写的用于显示日期选择器的 javascript:
$(function() {
$(".datepicker").datepicker({ dateFormat: 'yy-mm-dd', autoSize:true });
});
$(function() {
$('.add_fields').on('click', function(){
$(this).datepicker({ dateFormat: 'yy-mm-dd', autoSize:true });
});
});
我在堆栈溢出时看到了其他解决此问题的方法,但他们的实现都没有解决我的问题。如您所见,javascript 检查带有“datepicker”类的任何字段,然后将 datepicker 类添加到其中。我很确定您需要向单击时添加新字段的按钮添加一个回调函数,这就是我所做的,但我不确定为什么我的函数无法正常工作。如果您需要更多信息来帮助解决这个问题,我很乐意提供。
解决方案编辑:
我将咖啡脚本文件更改为以下内容以使其按预期工作:
jQuery ->
datepicker_update = -> $("input.datepicker").datepicker({ dateFormat: 'yy-mm-dd', autoSize:true })
$('form').on 'click', '.add_fields', (event) ->
time = new Date().getTime()
regexp = new RegExp($(this).data('id'), 'g')
$(this).before($(this).data('fields').replace(regexp, time))
event.preventDefault()
datepicker_update()
这是下面提供的两者的组合答案