是否有一種方法可以使用jQuery UI Datepicker小部件來選擇多個日期?jQuery UI Datepicker - 多個日期選擇
所有幫助表示讚賞! 如果它不能使用jQuery UI日期選擇器,那麼是否有類似的東西呢?
是否有一種方法可以使用jQuery UI Datepicker小部件來選擇多個日期?jQuery UI Datepicker - 多個日期選擇
所有幫助表示讚賞! 如果它不能使用jQuery UI日期選擇器,那麼是否有類似的東西呢?
我需要做同樣的事情,所以寫了一些JavaScript來啓用它,使用onSelect
和beforeShowDay
事件。它維護自己的選定日期數組,因此不幸的是沒有與顯示當前日期的文本框集成在一起。我只是將它用作內聯控件,然後我可以查詢當前選定日期的數組。
我用this code作爲基礎。
<script type="text/javascript">
// Maintain array of dates
var dates = new Array();
function addDate(date) {
if (jQuery.inArray(date, dates) < 0)
dates.push(date);
}
function removeDate(index) {
dates.splice(index, 1);
}
// Adds a date if we don't have it yet, else remove it
function addOrRemoveDate(date) {
var index = jQuery.inArray(date, dates);
if (index >= 0)
removeDate(index);
else
addDate(date);
}
// Takes a 1-digit number and inserts a zero before it
function padNumber(number) {
var ret = new String(number);
if (ret.length == 1)
ret = "0" + ret;
return ret;
}
jQuery(function() {
jQuery("#datepicker").datepicker({
onSelect: function (dateText, inst) {
addOrRemoveDate(dateText);
},
beforeShowDay: function (date) {
var year = date.getFullYear();
// months and days are inserted into the array in the form, e.g "01/01/2009", but here the format is "1/1/2009"
var month = padNumber(date.getMonth() + 1);
var day = padNumber(date.getDate());
// This depends on the datepicker's date format
var dateString = month + "/" + day + "/" + year;
var gotDate = jQuery.inArray(dateString, dates);
if (gotDate >= 0) {
// Enable date so it can be deselected. Set style to be highlighted
return [true, "ui-state-highlight"];
}
// Dates not in the array are left enabled, but with no extra style
return [true, ""];
}
});
});
</script>
這很好! =)你有任何非JavaScript的後備? – 2010-01-31 11:44:14
insertZeroForDayOrMonth未定義 – 2011-11-01 18:40:30
用padNumber替換insertZeroForDayOrMonth。謝謝@Tevin。這對我幫助很大。 – 2012-09-06 17:48:22
當你稍微修改它時,它會工作,不管你設置了哪個dateFormat。
$("#datepicker").datepicker({
dateFormat: "@", // Unix timestamp
onSelect: function(dateText, inst){
addOrRemoveDate(dateText);
},
beforeShowDay: function(date){
var gotDate = $.inArray($.datepicker.formatDate($(this).datepicker('option', 'dateFormat'), date), dates);
if (gotDate >= 0) {
return [false,"ui-state-highlight", "Event Name"];
}
return [true, ""];
}
});
我現在已經花了相當長的一段時間,試圖找到一個很好的日期選擇器支持區間範圍,而這最終找到了一個:
http://keith-wood.name/datepick.html
我認爲這可能是最好的jQuery日期選擇器來選擇一個範圍或多個日期,並且聲稱它是jQuery UI datepicker的基礎,我沒有理由懷疑它,因爲它看起來非常強大,並且還有很好的文檔記錄!
這很好,但無法得到uitheme造型。 – JohnMerlino 2012-02-07 14:45:41
@dubrox開發的插件非常輕便,幾乎與jQuery UI完全相同。我的要求是有能力限制所選日期的數量。
直觀地看,maxPicks
屬性似乎是爲此目的而提供的,但它不起作用。
對於那些尋找此修復程序,那就是:
首先,你需要patchjquery.ui.multidatespicker.js
。我已提交pull request on github。您可以使用它,直到dubrox將其與主人合併或提出他自己的修復。
用法非常簡單。下面的代碼會導致日期選擇器在指定的日期數(maxPicks
)已被選中後不會選擇任何日期。如果您取消選擇任何先前選擇的日期,它將讓您再次選擇,直到您再次達到限制。
$("#mydatefield").multiDatesPicker({maxPicks: 3});
使用jQuery UI日曆,這個插件可以讓你選擇多個日期:
http://dubrox.github.io/Multiple-Dates-Picker-for-jQuery-UI/
剛把這個要求;這裏是我使用的代碼。照常將其應用於輸入,我正在使用類typeof__multidatepicker
。
它維護所有者文本框中的唯一日期列表。你也可以在那裏鍵入,這是沒有驗證 - 顯然服務器需要檢查結果列表!
我試圖讓它與datepicker的鏈接文本框一起工作,但失敗了,所以它爲datepicker創建了一個不可見的輸入(它似乎不適用於display:none
,因此也是奇怪的樣式)。
它位於主輸入上方,所以日期選擇器出現在正確的位置,寬度爲1px,因此您仍然可以鍵入主文本框。
這是一個固定平臺的內部網,所以我沒有做過很多的跨瀏覽器測試。
請記住在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); });
使用此plugin http://multidatespickr.sourceforge.net
使用本上:
$('body').on('focus',".datumwaehlen", function(){
$(this).datepicker({
minDate: -20
});
});
有一個有用的插件@ http://www.filamentgroup.com/lab/date_range_picker_using_jquery_ui_16_and_jquery_ui_css_framework/ – 2009-09-20 21:37:54
相關:http://stackoverflow.com/問題/ 903628/jquery-ui-datepicker-can-it-handle-multiple-dates – 2009-09-20 23:54:12
謝謝:)這很好,雖然不是多日期選擇器 – tarnfeld 2009-09-21 17:10:26