我正在为datepicker(http://www.eyecon.ro/bootstrap-datepicker/)使用bootstrap插件。 当您转到上面的链接时,会有一个代码示例,说明如何制作一个简单的登记签出表格。在结账日期选择器上,禁用登记日期选择器之前的所有日期。
在我的网站上有多个签到结帐表格(适用于多个房间)。每间客房均提供办理入住手续和退房日期(情侣)。所以我认为以下代码可以做到。
创建一个包含页面上所有日期选择器的数组(它可以是变量)。然后每对2循环遍历数组+应用代码。
if ($('.datepicker').length) {
//get all the datepickers
var IDs = [];
$(".main").find(".datepicker").each(function(){ IDs.push(this.id); });
for(j=0;j<IDs.length;j++){
var nowTemp = new Date();
var now = new Date(nowTemp.getFullYear(), nowTemp.getMonth(), nowTemp.getDate(), 0, 0, 0, 0);
var checkin = $('#'+ IDs[j]).datepicker({
onRender: function(date) {
return date.valueOf() < now.valueOf() ? 'disabled' : '';
}
}).on('changeDate', function(ev) {
var newDate = new Date(ev.date)
newDate.setDate(newDate.getDate() + 1);
checkout.setValue(newDate);
checkin.hide();
$('#'+ IDs[j+1])[0].focus();
}).data('datepicker');
var checkout = $('#'+ IDs[j+1]).datepicker({
onRender: function(date) {
return date.valueOf() <= checkin.date.valueOf() ? 'disabled' : '';
}
}).on('changeDate', function(ev) {
checkout.hide();
}).data('datepicker');
j++;
}
}
如果我在页面上有2个日期选择器,那么第二个就会按预期工作。第一个根本没有。如果我在页面上有1个日期选择器,那就可以了。
添加警报(ID)时,我会按照正确的顺序获得一个ID正确的数组。
如果有人可以提供帮助...... :)提前感谢!
答案 0 :(得分:0)
我一直在研究这个问题并且认为如果有人在寻找,我会发布答案。
通过查找类'datepicker'的任何内容来工作。如果该项目的ID以“from”结尾,则会查找ID为“to”的相应项目。如果ID不以'from'或'to'结尾,则它会绑定普通的日期选择器。
我确信jquery guru可以做得更好; - )
外部JS:
function datepickerFromTo(fromSelector, toSelector, format) {
var nowTemp = new Date();
var now = new Date(nowTemp.getFullYear(), nowTemp.getMonth(), nowTemp.getDate(), 0, 0, 0, 0);
var fromDate = $(fromSelector).datepicker({
weekStart: 1,
format: format,
onRender: function (date) {
return date.valueOf() < now.valueOf() ? 'disabled' : '';
}
}).on('show', function (ev) {
toDate.hide();
}).on('changeDate', function (ev) {
if (ev.date.valueOf() > toDate.date.valueOf()) {
var newDate = new Date(ev.date)
newDate.setDate(newDate.getDate());
toDate.setValue(newDate);
}
fromDate.hide();
$(toSelector)[0].focus();
}).data('datepicker');
var toDate = $(toSelector).datepicker({
weekStart: 1,
format: format,
onRender: function (date) {
return date.valueOf() <= fromDate.date.valueOf() ? 'disabled' : '';
}
}).on('show', function (ev) {
fromDate.hide();
}).on('changeDate', function (ev) {
toDate.hide();
}).data('datepicker');
}
在页面底部:
<script>
$('.datepicker').each(function() {
var thisId = $(this).attr("id");
if(thisId.length >= 4 && thisId.substr(thisId.length - 4) == "from") { // The ID ends with 'from' - treat it as a 'from' date
var idRoot = thisId.substr(0, thisId.length - 4);
var toDateSelector = '#' + idRoot + 'to';
var toDate = $(toDateSelector);
if(toDate.length) { // Found a matching 'to date'
datepickerFromTo('#' + thisId,toDateSelector,'dd/mm/yyyy');
}
} else if(!thisId.length >= 2 && thisId.substr(thisId.length - 2) == "to") { // Bind an ordinary datepicker. Exclude anything with ID ending with 'to' date as this is handled when binding 'from' date.
$(this).datepicker({
weekStart: 1,
format: 'dd/mm/yyyy'
});
}
});
</script>