2009-03-24 9 views
23

Existe-t-il un moyen (facile) de régler le jpu Datepicker de l'interface utilisateur jQuery pour interdire la sélection de jours prédéterminés spécifiques?jQuery UI Datepicker - Désactiver des jours spécifiques

J'ai réussi à faire fonctionner this approach, cependant, il produit une erreur nulle qui l'empêche d'afficher dans IE.

'natDays [...]. 0' est nulle ou non un objet

Merci à l'avance!

MISE À JOUR: Peut-être aider si j'ai 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!

+0

pouvez-vous coller votre code de ce que vous avez des thats produisant e e erreur – TStamper

+0

Besoin d'un échantillon de code d'au moins la ligne en question ... – Tracker1

Répondre

9

Avez-vous essayé de déclarer natDays correctement 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 comme vos les tableaux n'ont 2 éléments en eux - essayez juste « »

De plus, vous souhaitez définir le nom de votre fonction beforeShowDay correctement - n » t ressembler à cela même d'appeler votre fonction personnalisée

+0

Hmm ... juste essayé. Pas de chance.C'est l'erreur que IE renvoie: 'natDays [...]. 0' est null ou un objet – Sam

+0

Voir ma modification récente ... ce n'est pas défini correctement (virgule supplémentaire) –

+0

Ok ... je pense nous arrivons quelque part! La virgule supplémentaire a corrigé les choses dans IE8. Pouvez-vous me montrer ce que vous voulez dire avec votre deuxième commentaire? (Je suis un novice de JS ... pouvez-vous dire?) Merci! – Sam

0
beforeShowDay: $.datepicker.noWeekends, 

sera

beforeShowDay: noWeekendsOrHolidays, 
14

Voici un moyen de désactiver les dates spécifiques d'être sélectionné:

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 - Disable Specific Dates

1

Le problème avec IE est le plus probablement sur la ligne suivante:

altField: '#alternate', 
}); 

Essayez de retirer le symbole virgule et il devrait fonctionner.

6

Vous pouvez utiliser l'option beforeShowDay. Je devais désactiver n'importe quel jour passé 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 date passée dans le rappel beforeShowDay est un objet de date JavaScript, il peut être formaté en utilisant différentes bibliothèques, un horodatage peut être récupéré par date. getTime(), etc.

+0

à utiliser à partir du bouton cliquez après sélecteur de spectacle? –

+0

@WHK Je suis désolé mais je ne comprends pas votre question. –

0
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 }); 

live Demo: http://jsfiddle.net/vfod0krm/

Questions connexes