2013-06-06 2 views
4

У меня возникла странная проблема при работе с простым datepicker с использованием 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

Нет, я видел это, прежде чем спрашивать здесь, это устраняет проблему при отображении datepicker, моя проблема возникает после того, как используется выбирает дату. –

+0

Возможно, вы можете сбросить дату на основе выбранной даты – DDK

ответ

3

Это DatePicker ошибка ticket JQuery UI это происходит, когда DatePicker высчитывает и рисовать месяцы и не использует хорошо разницу текущего месяца, определенную 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); 
} 

Fiddle: http://jsfiddle.net/huPSb/1/

+0

этот патч работал для меня, спасибо! –

+0

Perfect. Это сработало для меня! –

2

если изменить функцию выбора с помощью этого кода, все будет работать нормально

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

Вот рабочий пример http://jsfiddle.net/4FFnp/

+0

Весна спасибо! –

0

Я нашел решение и исправил jquery-ui.js в основном двумя строками кода в подписи datepicker outines _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:4, http://bugs.jqueryui.com/ticket/7580?cnum_edit=5#comment:5, http://bugs.jqueryui.com/ticket/7580#comment:5)

Смежные вопросы