jQuery UI DatePicker - dias Disable específicos
-
21-08-2019 - |
Pergunta
Existe alguma (fácil) maneira de definir o jQuery UI DatePicker a seleção disallow de específico, dias predeterminados?
Eu era capaz de conseguir esta abordagem de trabalho, no entanto, ela produz um erro nula que a impede de exibir no IE.
'natDays [...]. 0' é nulo ou não um objeto
Agradecemos antecipadamente!
UPDATE: pode ajudar se eu incluído algum código, certo? De qualquer forma, a maior parte deste foi tomado em linha reta do fio acima mencionado:
natDays = [
[7, 23], [7, 24], [8, 13], [8, 14],
];
function nationalDays(date) {
for (i = 0; i < natDays.length; i++) {
if (date.getMonth() == natDays[i][0] - 1
&& date.getDate() == natDays[i][1]) {
return [false, natDays[i][2] + '_day'];
}
}
return [true, ''];
}
function noWeekendsOrHolidays(date) {
var noWeekend = $.datepicker.noWeekends(date);
if (noWeekend[0]) {
return nationalDays(date);
} else {
return noWeekend;
}
}
$(function() {
$("#datepicker").datepicker({
inline: true,
minDate: new Date(2009, 6, 6),
maxDate: new Date(2009, 7, 14),
numberOfMonths: 2,
hideIfNoPrevNext: true,
beforeShowDay: $.datepicker.noWeekends,
altField: '#alternate',
});
});
Mais uma vez obrigado!
Solução
Você já tentou declarar natDays corretamente com a palavra-chave 'var' na frente?
Além disso - você tem uma vírgula extra no final da sua definição natDays
.natDays [i] [2] não vai trabalhar como seu as matrizes só tem 2 itens neles - tentar apenas ''
Além disso, você vai querer definir o nome da função beforeShowDay corretamente - não parece que está mesmo chamando sua função personalizada
Outras dicas
Aqui está uma maneira de desativar datas específicas sejam selecionadas:
var unavailableDates = ["9-5-2011","14-5-2011","15-5-2011"];
function unavailable(date) {
dmy = date.getDate() + "-" + (date.getMonth()+1) + "-" + date.getFullYear();
if ($.inArray(dmy, unavailableDates) < 0) {
return [true,"","Book Now"];
} else {
return [false,"","Booked Out"];
}
}
$('#iDate').datepicker({ beforeShowDay: unavailable });
Você pode usar a opção beforeShowDay
. Eu precisava desativar qualquer dia passado dia 28 do mês. Aqui está o meu código.
$('.datepicker').datepicker({
dateFormat: "yy-mm-dd",
beforeShowDay: function(date) {
var day = date.getDate();
if (day > 28) {
return [false];
} else {
return [true];
}
}
});
Aqui está mais informações sobre ele: http://api.jqueryui.com/datepicker/ # opção de beforeShowDay
A variável data passada para a chamada de retorno beforeShowDay é um objecto data JavaScript, por isso, pode ser formatado utilizando várias bibliotecas, um carimbo de hora pode ser recuperado usando date.getTime (), etc.
beforeShowDay: $.datepicker.noWeekends,
estará
beforeShowDay: noWeekendsOrHolidays,
O problema com o IE é mais provável para a seguinte linha:
altField: '#alternate',
});
Tente remover o símbolo vírgula e ele deve funcionar.
var unavailableDates = ["19-8-2014","14-9-2014"];
function unavailable(date) {
dmy = date.getDate() + "-" + (date.getMonth()+1) + "-" +date.getFullYear();
if ($.inArray(dmy, unavailableDates) < 0) {
return [true,"","Book Now"];
} else {
return [false,"","Booked Out"];
}
}
$('#iDate').datepicker({ beforeShowDay: unavailable });
Demonstração ao vivo: http://jsfiddle.net/vfod0krm/