2009-03-24 10 views
23

Esiste un modo (facile) per impostare jQuery UI Datepicker per disabilitare la selezione di giorni specifici e predeterminati?jQuery UI Datepicker - Disabilita giorni specifici

Sono stato in grado di ottenere this approach funzionante, tuttavia, produce un errore nullo che impedisce la visualizzazione in IE.

'natDays [...]. 0' è null o non un oggetto

Grazie in anticipo!

AGGIORNAMENTO: Potrebbe aiutare se ho incluso del codice, giusto? Comunque, la maggior parte di questo è stato preso direttamente dalla suddetta discussione:

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', 
     }); 
    }); 

Grazie ancora!

+0

potrebbe incollare il codice di quello che hai questo è producono ° e errore – TStamper

+0

Hai bisogno di un esempio di codice almeno della linea in questione ... – Tracker1

risposta

9

Hai provato a dichiarare natDays correttamente con la parola chiave 'var' in primo piano?

Inoltre, si dispone di una virgola aggiuntiva alla fine della definizione natDays.

natDays [i] [2] non funzionerà come i vostri le matrici avere solo 2 elementi in loro - tenta solo ''

Inoltre, ti consigliamo di impostare correttamente il nome di funzione beforeShowDay - doesn' t aspetto come se fosse anche chiamando la funzione personalizzata

+0

Hmm ... l'ho provato. Senza fortuna.Questo è l'errore restituito da IE: 'natDays [...]. 0' è null o non è un oggetto – Sam

+0

Vedere la mia modifica recente ... non è definita correttamente (virgola extra) –

+0

Ok ... penso stiamo arrivando da qualche parte! La virgola extra fissa le cose in IE8. Puoi mostrarmi cosa intendi con il tuo secondo commento? (Sono un principiante JS ... puoi dirlo?) Grazie! – Sam

0
beforeShowDay: $.datepicker.noWeekends, 

sarà

beforeShowDay: noWeekendsOrHolidays, 
14

Ecco un modo per disabilitare date specifiche da essere selezionato:

012.
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

Il problema con IE è molto probabilmente sulla riga seguente:

altField: '#alternate', 
}); 

tenta di rimuovere il simbolo virgola e dovrebbe funzionare.

6

È possibile utilizzare l'opzione beforeShowDay. Avevo bisogno di disabilitare qualsiasi giorno dopo il 28 del mese. Ecco il mio codice.

$('.datepicker').datepicker({ 
    dateFormat: "yy-mm-dd", 
    beforeShowDay: function(date) { 
     var day = date.getDate(); 
     if (day > 28) { 
      return [false]; 
     } else { 
      return [true]; 
     } 
    } 
}); 

Qui è più informazioni su di esso: http://api.jqueryui.com/datepicker/#option-beforeShowDay

La variabile data passata nella richiamata beforeShowDay è una data oggetto JavaScript, in modo che possa essere formattata utilizzando varie librerie, un timestamp possono essere recuperate con data. getTime(), ecc

+0

da utilizzare dal clic del pulsante dopo il selettore mostra? –

+0

@WHK Mi dispiace ma non capisco la tua domanda. –

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

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

Problemi correlati