web-dev-qa-db-fra.com

jQuery UI Datepicker - Désactiver des jours spécifiques

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!

23
Sam

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

9
Chris Haines

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

14
Tokes

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.

7
Alex K

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. 

1
Lukas Celovsky
beforeShowDay: $.datepicker.noWeekends,

sera

beforeShowDay: noWeekendsOrHolidays,
1
allen
 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/

0
Roman