Pergunta

Existe alguma (fácil) maneira de definir o jQuery UI DatePicker a seleção disallow de específico, dias predeterminados?

Eu era capaz de conseguir esta abordagem de trabalho, no entanto, ela produz um erro nula que a impede de exibir no IE.

'natDays [...]. 0' é nulo ou não um objeto

Agradecemos antecipadamente!

UPDATE: pode ajudar se eu incluído algum código, certo? De qualquer forma, a maior parte deste foi tomado em linha reta do fio acima mencionado:

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

Mais uma vez obrigado!

Foi útil?

Solução

Você já tentou declarar natDays corretamente com a palavra-chave 'var' na frente?

Além disso - você tem uma vírgula extra no final da sua definição natDays

.

natDays [i] [2] não vai trabalhar como seu as matrizes só tem 2 itens neles - tentar apenas ''

Além disso, você vai querer definir o nome da função beforeShowDay corretamente - não parece que está mesmo chamando sua função personalizada

Outras dicas

Aqui está uma maneira de desativar datas específicas sejam selecionadas:

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

Fonte: jQuery - datePicker - Datas Disable específicos

Você pode usar a opção beforeShowDay. Eu precisava desativar qualquer dia passado dia 28 do mês. Aqui está o meu código.

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

Aqui está mais informações sobre ele: http://api.jqueryui.com/datepicker/ # opção de beforeShowDay

A variável data passada para a chamada de retorno beforeShowDay é um objecto data JavaScript, por isso, pode ser formatado utilizando várias bibliotecas, um carimbo de hora pode ser recuperado usando date.getTime (), etc.

beforeShowDay: $.datepicker.noWeekends,

estará

beforeShowDay: noWeekendsOrHolidays,

O problema com o IE é mais provável para a seguinte linha:

altField: '#alternate',
}); 

Tente remover o símbolo vírgula e ele deve funcionar.

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

Demonstração ao vivo: http://jsfiddle.net/vfod0krm/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top