Existe-t-il un moyen (facile) de configurer le Datepicker de l'interface utilisateur jQuery pour interdire la sélection de jours spécifiques prédéterminés?
J'ai pu obtenir cette approche fonctionne, cependant, cela produit une erreur nulle qui l'empêche de s'afficher dans IE.
'natDays [...]. 0' est nul ou non un objet
Merci d'avance!
UPDATE: Peut-être aider si j'inclus du code, non? Quoi qu'il en soit, la plupart de ceci a été pris directement du fil mentionné ci-dessus:
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',
});
});
Merci encore!
Avez-vous essayé de déclarer correctement natDays avec le mot-clé 'var' devant?
De plus, vous avez une virgule supplémentaire à la fin de votre définition de natDays.
natDays [i] [2] ne fonctionnera pas car vos tableaux ne contiennent que 2 éléments - essayez simplement ''
De plus, vous aurez envie de définir correctement le nom de votre fonction beforeShowDay - elle ne ressemble même pas à l'appel de votre fonction personnalisée
Voici un moyen de désactiver certaines dates de la sélection:
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 });
Source: jQuery - Datepicker - Désactiver des dates spécifiques
Vous pouvez utiliser l'option beforeShowDay
. Je devais désactiver n'importe quel jour après le 28 du mois. Voici mon code.
$('.datepicker').datepicker({
dateFormat: "yy-mm-dd",
beforeShowDay: function(date) {
var day = date.getDate();
if (day > 28) {
return [false];
} else {
return [true];
}
}
});
Voici plus d'informations à ce sujet: http://api.jqueryui.com/datepicker/#option-beforeShowDay
La variable de date passée dans le rappel beforeShowDay est un objet de date JavaScript. Elle peut donc être formatée à l'aide de différentes bibliothèques. Un horodatage peut être récupéré à l'aide de date.getTime (), etc.
Le problème avec IE se situe probablement sur la ligne suivante:
altField: '#alternate',
});
Essayez de supprimer le symbole de virgule et cela devrait fonctionner.
beforeShowDay: $.datepicker.noWeekends,
sera
beforeShowDay: noWeekendsOrHolidays,
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 });
Démo en direct: http://jsfiddle.net/vfod0krm/