奇怪的jQuery日期选择器操作

Tre*_*wak 7 jquery jquery-ui

当我使用live声明一个datepicker时,似乎按预期工作,直到你更改月份.然后,如果按下月份和1899年12月,如果按回月份,则不会进入下一个月或上个月,而是跳回到1900年1月.

运用

$('.datepicker').live('focus', function () {
  $(this).datepicker('destroy').datepicker();
});
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢

Sco*_*ler 9

我认为你看到问题的一个可能原因是,当你使用焦点附加到输入时,你正在销毁你的日期选择器并重新制作一个.但是,当您单击输入时,它会运行,因此会破坏日期选择器,并显示一个.但是,当您单击下一个或上一个时,您最初会忽略输入,但是datepicker脚本将"重新聚焦"它,因此会触发销毁并重新创建一个日期选择器.

我假设你正在使用live来将一个日期选择器附加到一个动态输入 - 你总是可以$('.datepicker').not('.hasDatePicker').datepicker();在你success:......的ajax调用的回调中使用call,我将假设你正在创建你的新输入.这将有一个影响,即添加一个尚未添加.datepicker()的类的任何输入项.(添加了一个输入,也会添加)datepicker.datepicker().datepicker()hasDatePicker


另一种方法 - 与现场通话保持一致 - 有专业和有效

  • PRO:你只需要在代码中使用一次 - 如果你有几个ajax调用可能会添加几个动态输入,而不是多次放置它.
  • CON:你正在创建一个更加耗费资源的代码,因为它会在每次输入获得焦点时运行,而不是仅仅应用.datepicker()一次.

因此,为了与现场保持一致,您可以执行以下操作:

$('.datepicker').live('focus', function () {
    $(this).not('.hasDatePicker').datepicker();
});
Run Code Online (Sandbox Code Playgroud)

这里看到它

这将附上.datepicker()与类中的任何输入datepicker还没有已经有了一个.datepicker()连接(类hasDatePicker),这应该救你破坏并重新创建所有datepickers.

这与@Andrew Whitaker的解决方案相同