Просто было требование для этого; вот код, который я использовал. Примените это к входу как обычно, я использую класс typeof__multidatepicker
.
Поддерживает список уникальных дат в текстовом поле владельца. Вы также можете ввести там, это не проверено - очевидно, сервер должен проверить список результатов!
Я попытался заставить его работать со связанным текстовым полем DatePicker, но потерпел неудачу, поэтому он создает невидимый ввод для DatePicker (похоже, он не работает с display:none
, отсюда и странный стиль).
Он расположен над основным вводом, поэтому указатель даты отображается в правильном месте и имеет ширину 1 пиксель, поэтому вы все еще можете ввести текст в основном текстовом поле.
Это для интрасети с фиксированной платформой, поэтому я не проводил много кросс-браузерного тестирования.
Не забудьте включить обработчик в body
, иначе он работает запутанно.
$('.typeof__multidatepicker').each(
function()
{
var _this = $(this);
var picker = $('<input tabindex="-1" style="position:absolute;opacity:0;width:1px" type="text"/>');
picker.insertAfter(this)
.position({my:'left top', at:'left top', of:this})
.datepicker({
beforeShow:
function()
{
_this.data('mdp-popped', true);
},
onClose:
function(dt, dpicker)
{
var date = $.datepicker.formatDate(picker.datepicker('option', 'dateFormat'), picker.datepicker('getDate'));
var hash = {};
var curr = _this.val() ? _this.val().split(/\s*,\s*/) : [];
var a = [];
$.each(curr,
function()
{
if(this != '' && !/^\s+$/.test(this))
{
a.push(this);
hash[this] = true;
}
}
);
if(date && !hash[date])
{
a.push(date);
_this.val(a.join(', '));
}
_this.data('mdp-popped', false);
_this.data('mdp-justclosed', true);
}
});
_this.on('focus',
function(e)
{
if(!_this.data('mdp-popped') && !_this.data('mdp-justclosed'))
_this.next().datepicker('show');
_this.data('mdp-justclosed', false);
}
);
}
);
$('body').on('click', function(e) { $('.typeof__multidatepicker').data('mdp-justclosed', false); });