2013-06-06 81 views
4

我在使用jqueryUI處理簡單的日期選擇器時出現了一個奇怪的問題。我只是想顯示兩個月的日曆與最後一個月和當月。我用這個代碼:jQuery UI Datepicker怪異行爲

$(function() { 
    $('#picker').datepicker({ 
     numberOfMonths: 2, 
     showCurrentAtPos: 1, 
     dateFormat: "yy-mm-dd", 
     onSelect: function() { 
      $('#out').html(this.value); 
     } 
    }); 
}); 

<div id="picker"></div> 
<output id="out"></output> 

它顯示我想要什麼,但有一個奇怪的行爲,你可以點擊這裏:

http://jsfiddle.net/xgvargas/UCbxf/

當你選擇一個日期,它跳轉到其他月份,並在在某些情況下,所選日期不再可見,即使它返回的日期是正確的。

如果你刪除線showCurrentAtPos:1,那麼這種行爲停止,但在這種情況下,我將有當前的月份和下一個,這不是我所需要的。

這是一個錯誤還是我僞造了一些東西?

順便說一下,我使用jquery和jqueryUI的最新版本。並且只在Chrome中進行過測試。

+0

showCurrentAtPos。這不是用於定義執行選擇後的行爲 – DDK

+0

不,我在問這裏之前看到了這一點,它在顯示日期選擇器時解決了問題,在使用選擇日期後發生問題。 –

+0

可能是你可以根據所選日期重置日期選擇器 – DDK

回答

3

這是一個jQuery UI日期選擇器的bug ticket當日期選擇器計算並繪製月它發生並且不能很好地利用showCurrentAtPos定義的當前月份差異。

一個可能的解決方案是將這段代碼添加到jquery.ui.datepicker.js文件在售票報道:

if (inst.drawMonth == showCurrentAtPos){ 

drawMonth = inst.drawMonth - showCurrentAtPos; 

} else{ 

drawMonth = inst.drawMonth; 

} 

或將一個補丁程序在你的onSelect功能,你認爲:

onSelect: function (dateText, datePicker) { 
    datePicker.drawMonth += $("#picker").datepicker("option", "showCurrentAtPos"); 
    $('#out').html(this.value); 
} 

小提琴:http://jsfiddle.net/huPSb/1/

+0

這個補丁適合我,謝謝! –

+0

完美。這對我有用! –

2

如果你改變選擇功能與此代碼,一切都將正常工作

onSelect: function (dateText, inst) { 
     inst.drawMonth +=1; 
     $('#out').html(this.value); 
    } 

這裏是工作示例http://jsfiddle.net/4FFnp/

+0

春天謝謝你! –

0

我找到了一個解決方案,並在datepicker子目錄中的基本上兩個代碼行中修補了jquery-ui.js烏蒂內_adjustDate()和_updateDatepicker():

--- jquery-ui.orig.js 2015-11-23 20:04:52.000000000 +0100 
+++ jquery-ui.js 2015-11-23 17:56:37.987111191 +0100 
@@ -8815,6 +8815,8 @@ 
     origyearshtml = inst.yearshtml = null; 
     }, 0); 
    } 
+  // FIX BUG http://bugs.jqueryui.com/ticket/7288 
+  inst.drawMonth += this._get(inst, "showCurrentAtPos"); 
}, 

// #6694 - don't focus the input if it's already focused 
@@ -8940,9 +8942,14 @@ 
    if (this._isDisabledDatepicker(target[0])) { 
     return; 
    } 
+  // FIX BUG http://bugs.jqueryui.com/ticket/7288 
+  /* 
     this._adjustInstDate(inst, offset + 
     (period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning 
     period); 
+  */ 
+  this._adjustInstDate(inst, offset, period); 
+ 
    this._updateDatepicker(inst); 
}, 

錯誤修復已http://bugs.jqueryui.com/ticket/9923#comment:4http://bugs.jqueryui.com/ticket/7580?cnum_edit=5#comment:5http://bugs.jqueryui.com/ticket/7580#comment:5被提交上游)僅用來顯示在所希望的位置的當前月份