【发布时间】:2014-08-19 05:02:15
【问题描述】:
我有一个日历页面,并且每天都有一个链接,通过 ajax 将表单加载到引导弹出窗口中。在那个 ajax 表单中,我有一个开始日期字段和一个结束日期字段。在加载表单然后创建并显示弹出框后,我立即使用 jQuery 通过 jQuery 将 datepicker 添加到每个日期字段:
$( ".datepicker" ).datepicker({ changeMonth: true, changeYear: true, dateFormat: "mm/dd/yy" }); //add the datepicker
它显然成功地将日期选择器绑定到字段,因为当我单击这些字段中的任何一个时,日期选择器就会出现。
但是,当我选择日期时,我在控制台中收到以下错误:
[Error] TypeError: 'undefined' is not an object (evaluating '= inst.currentDay = $("a", td).html()')
_selectDay (jquery.ui.datepicker.js, line 977)
selectDay (jquery.ui.datepicker.js, line 1568)
dispatch (jquery.js, line 5096)
handle (jquery.js, line 4767)
我已经阅读了很多关于此的内容,这似乎是因为我绑定 datepicker 的输入字段是在 DOM 最初加载后作为 ajax 请求的一部分加载的。这是有道理的,因为我使用完全相同的方法将 datepicker 绑定到其他页面上,但在其他页面上,我附加 datepicker 的表单元素是初始页面加载的一部分。在这些页面中,一切正常。
那么,我遇到这个问题是否正确,因为带有输入的表单是异步加载的?如果是这样,我该怎么做才能在以这种方式加载的表单元素上正确使用日期选择器?
更新
这里有一些关于我目前具体如何做的细节。根据@Mandeep,我正在这样做。这是构建弹出框并随后添加日期选择器的代码 (new.js.erb):
$('#newEvent').empty(); //empty any previous popover content from its container
$('#<%= @event.start.to_date.strftime("%Y-%m-%d") %>').find('a.new-event-link').popover('destroy'); //destroy any popover currently bound to the link
$('#<%= @event.start.to_date.strftime("%Y-%m-%d") %>').find('a.new-event-link').popover({
trigger:'manual', placement: 'left', html:true, title:'New Event', content:'<%= j render("new_popover") %>', container:"#newEvent"
}); //create the popover and render _new_popover.html.erb in the contents. This is the form with the dates
$('#<%= @event.start.to_date.strftime("%Y-%m-%d") %>').find('a.new-event-link').popover('show'); //show the popover
$( ".datepicker" ).datepicker({ changeMonth: true, changeYear: true, dateFormat: "mm/dd/yy" }); //add the datepicker
$('#cancelEvent').click(function(){
$('#<%= @event.start.to_date.strftime("%Y-%m-%d") %>').find('a.new-event-link').popover('hide');
}); //hide the popover on clicking cancel
如前所述,这一切都可以正常工作:1) 创建弹出框并在其中呈现表单,以及 2) 附加日期选择器。但问题在于选择日期。那是我得到错误的时候。
【问题讨论】:
-
您是否尝试过在元素附加到 dom 后启用 datepicker 而不是准备好?
标签: jquery ruby-on-rails ajax twitter-bootstrap datepicker