带有嵌套表单的jQuery UI日期选择器
我已经看过了,但这并没有解决我的问题,但情况是一样的。jQuery加载得很好 这是我的“嵌套表单”:带有嵌套表单的jQuery UI日期选择器,jquery,ruby-on-rails,ruby-on-rails-3,jquery-ui,Jquery,Ruby On Rails,Ruby On Rails 3,Jquery Ui,我已经看过了,但这并没有解决我的问题,但情况是一样的。jQuery加载得很好 这是我的“嵌套表单”: <%= f.fields_for :events do |event_form| %> <%= event_form.text_field :name %> <%= event_form.text_field :date, :class => 'event_date' %> <%= event_form.text_field :email %>
<%= f.fields_for :events do |event_form| %>
<%= event_form.text_field :name %>
<%= event_form.text_field :date, :class => 'event_date' %>
<%= event_form.text_field :email %>
<%= event_form.text_field :place %>
<%= event_form.link_to_remove "Remove Event", :class => "remove_task" %>
<% end %>
最后是生成的html。您可以看到jQuery UI为DatePicker添加了它的类(hasDatepicker):
<input class="event_date hasDatepicker" id="group_events_attributes_new_1317162040750_date" name="group[events_attributes][new_1317162040750][date]" size="30" type="text" style="border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; border-bottom-left-radius: 5px 5px; border-bottom-right-radius: 5px 5px; ">
任何帮助都将不胜感激。谢谢 首先,您可以编写以下代码来显示从一开始呈现的日期选择器字段:
$(function() {
$('.event_date').datepicker();
});
但是对于嵌套表单通过javascript创建的字段,您必须在添加字段()后拦截form
元素触发的nested:fieldAdded
事件。您可以通过以下方式完成此任务:
$(function() {
$('form').live('nested:fieldAdded', function(event) {
$(event.field).find('.event_date').removeClass('hasDatepicker').datepicker();
});
});
请注意
removeClass('hasDatepicker')
:如果没有它,由javascript创建的日期选择器字段将无法正确初始化。我现在正在表单中执行相同的操作。下面是我使用jQuery1.7的示例
(function ($) {
var app = {}, opts = { dateFormat: 'yy-mm-dd' }, dateSelector = 'input.event_date:visible';
app.init = function(){
$(window).on('nested:fieldAdded', onFieldAdded);
$(dateSelector).datepicker(opts);
};
function onFieldAdded(e) {
e.field.find(dateSelector).datepicker(opts);
}
$(app.init);
return app;
} (jQuery));
对于较旧版本的jQuery,可以在init函数中使用以下内容
$(window).bind('nested:fieldAdded', onFieldAdded);
我所做的更好的是,重复次数更少(选择器的字符串),并且我不会对隐藏的元素调用datepicker,因此不需要对通过嵌套表单添加的元素调用removeClass(“hasDatepicker”)。谢谢。。。但我还是不能让它工作,它从来都不工作?还是仅通过js添加字段?是否确实正确加载了jquery和ui?您可以将onload选择器更改为使用可见选择器$('.event_date:visible')。datepicker()而不是删除该类;这样,您的隐藏元素就不会得到hasDatepicker类。
$(window).bind('nested:fieldAdded', onFieldAdded);