2012-08-30 170 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。 –