2011-08-10 4 views
5

Comment puis-je désactiver les dates avant aujourd'hui dans jQuery datepicker SANS utiliser minDate: 0?comment désactiver certaines dates avant aujourd'hui dans jQuery datepicker

Je voudrais activer la navigation du calendrier comme d'habitude avant aujourd'hui tout en veillant à ce que l'utilisateur ne sélectionne pas les dates avant aujourd'hui.

(c.-à-dire la date d'aujourd'hui est 11Aug11 et je voudrais toutes les dates avant cette même désactivée, permettant l'utilisateur d'aller aux mois précédents, années, etc.)

+6

Du point de vue UX, pourquoi vous les voulez être en mesure de voir * * les valeurs sans pouvoir * sélectionner * les valeurs? – zzzzBov

+0

Merci les gars, je suis d'accord, il semble redondant mais je construis un site Web qui permet au client d'organiser des réunions/événements. Il serait peut-être plus pratique pour le client d'avoir un aperçu des dates précédentes dans le même calendrier, au cas où. – user864600

Répondre

6

Même si je suis d'accord que c'est un comportement étrange, vous pourriez être en mesure de simuler à l'aide de l'événement onSelect de la datepicker. En général, vous gérez l'événement onSelect. Quand une date est sélectionnée, vérifiez si elle est antérieure à la date d'aujourd'hui.

Si elle est , alors vous immédiatement show à nouveau datepicker et effacer la boîte d'entrée attaché.


Mise à jour Exemple de code est maintenant complètement fonctionnel. Voici un jsfiddle à démontrer.

1

Il ne semble pas être configurable. À line 1434 of jquery.ui.datepicker.js, si un maxDate est spécifié, il définit une variable maxDraw et dessine jusqu'au mois de cette date, sans tenir compte des autres indicateurs.

Mais je suis également d'accord avec zzzzBov. Pourquoi l'utilisateur aurait-il besoin de voir les valeurs qu'il ne peut pas sélectionner?

3

J'espère que cela est toujours utile à quelqu'un. Ma solution est de placer des contrôles sur les dates individuelles comme ceci:

$("#StartDate").datepicker({ dateFormat: 'yy-mm-dd', beforeShowDay: NotBeforeToday}); 



function NotBeforeToday(date) 
{ 
    var now = new Date();//this gets the current date and time 
    if (date.getFullYear() == now.getFullYear() && date.getMonth() == now.getMonth() && date.getDate() > now.getDate()) 
     return [true]; 
    if (date.getFullYear() >= now.getFullYear() && date.getMonth() > now.getMonth()) 
     return [true]; 
    if (date.getFullYear() > now.getFullYear()) 
     return [true]; 
    return [false]; 
} 

Je trouve simple et élégante

1

vous pouvez plutôt écrire une fonction dans votre fichier .js comme this-

$(function() { 

      var date = new Date(); 
      var currentMonth = date.getMonth(); 
      var currentDate = date.getDate(); 
      var currentYear = date.getFullYear(); 

      if($("#dateToSelect").length > 0){ 
       $("#dateToSelect").datepicker({ 
       maxDate: new Date(currentYear, currentMonth, currentDate) 
      }); 
      } 
}) 

Ici, "dateToSelect" est l'identifiant du champ où la date est affichée. La vérification de la longueur de la date n'est pas obligatoire ici.

1

solution la plus simple pourrait ....

<script type="text/javascript">$('#date').datepicker({ minDate: 0 });</script> 
Questions connexes