2012-08-30 182 views
0

我使用jQuery UI - Custom widget - Datepicker to Whole Year Calendar中概述的方法显示全年日历。每当我点击某个日期时,日历就会滚动以显示位置0处点击日期的月份。我希望日历保持在任何时候选择日期的位置。我尝试了以下方法,但无济于事保持日历不移动:选择日期时保持内联全年日期选择日历不移动

  1. 将showCurrentAtPos更新为onChangeMonthYear处理程序中的选定月份。
  2. 更改onSelect处理程序中的showCurrentAtPos。
  3. 在onSelect处理函数中将实际日期设置为当前年份的第一个。

选项1不起作用,因为onChangeMonthYear仅在单击上一个和下一个链接以更改月份而不是选择日期时调用。

选项2似乎是在重新呈现日历之前设置的值。

选项3失败出于同样的原因为选项2

回答

0

到目前为止,我能找到的唯一解决方案是在ONSELECT处理程序结束执行下面的代码位:

var parts = dateText.split('-'); 
setTimeout(function() { 
    // This timeout keeps the calendar from moving around and shifting 
    // the first month from january to the currently selecte month. 
    // For some reason it keeps the red date as the intended one. 
     $weeklycalendar.datepicker('setDate', parts[0]+'-01-01'); 
}, 0); 

这显然是一个脆弱的解决方案,因为它取决于竞争条件和时间。如果超时功能被激发得太快,如果太晚会引起视觉上的跳跃,它会中断。

0

尝试以下操作:

  1. 获得通过onSelect事件选定的文本(像你这样做的话)。
  2. 使用beforeShow事件将日期设置为年初。

这样,每次点击日期选择器显示,并从1月1日开始。缺点:一旦你点击日期选择器,之前选择的值就会被覆盖。

类似下面的代码:

$("#datepicker").datepicker({ 
     numberOfMonths: 12, 
     defaultDate: "01/01/12", 
     onSelect: function(dateText,inst) { 
      console.log("This is currently selected date: " + dateText); 

     }, 
     beforeShow: function(input, inst) { 
      $("#datepicker").datepicker("setDate" , "01/01/12"); 
     } 


    }); 
+0

从我可以告诉日期选择在jQuery UI的1.8(或谷歌AJAX API提供了一个)并不会触发beforeShow回调。否则,这将是我的首选解决方案。 –

+0

我假设你指的是这个 - https://developers.google.com/speed/libraries/devguide#jquery-ui。它使用1.8.23,这是我用来测试上述代码片段的一个。也许别的东西不见了? – SuPotter

+0

我们现在使用的是较老的jQuery UI。这些行为在浏览器之间似乎也略有变化,例如:Safari,Firefox,Chrome和IE。 –