当我使用live声明一个datepicker时,似乎按预期工作,直到你改变月份.然后,如果按下月份和1899年12月,如果按下月份,则不会转到下一个月或上个月,而是跳回到1900年1月.
运用
$('.datepicker').live('focus',function () { $(this).datepicker('destroy').datepicker(); });
有任何想法吗?
谢谢
解决方法
我认为你看到问题的一个可能原因是,当你使用焦点附加到输入时,你正在摧毁你的日期选择器并重新制作一个.但是,当您单击输入时,它会运行,因此会破坏日期选择器,并显示一个.但是,当您单击下一个或上一个时,您最初会忽略输入,但是datepicker脚本将“重新聚焦”它,因此会触发销毁并重新创建一个日期选择器.
我假设您正在使用live将日期选择器附加到动态输入 – 您可以在成功时始终使用$('.datepicker').not('.hasDatePicker').datepicker();
调用:……回调您的ajax调用,我将假设您正在创建新输入.这会产生将.datepicker()添加到任何具有类datepicker的输入项的影响,该类还没有添加.datepicker(). (添加了.datepicker()的输入也将添加类hasDatePicker)
另一种方法 – 与现场通话保持一致 – 有专业和有效
> PRO:你只需要在代码中使用一次 – 如果你有几个ajax调用可能会添加几个动态输入,而不是多次放置它.
> CON:你正在创建一个更加耗费资源的代码,因为它会在每次输入获得焦点时运行,而不是仅仅应用.datepicker()一次.
因此,为了与现场保持一致,您可以执行以下操作:
$('.datepicker').live('focus',function () { $(this).not('.hasDatePicker').datepicker(); });
在行动here中看到它
这会将.datepicker()附加到任何带有类datepicker的输入,该类没有附加.datepicker()(类hasDatePicker),这可以节省你破坏和重新创建所有日期选择器.
这与@Andrew Whitaker的解决方案相同