Como faço para redefinir os valores do calendário do selecionador de data? .. As restrições de data mínima e máxima?
O problema é que quando eu limpo as datas (excluindo os valores da caixa de texto), as restrições de datas anteriores ainda são aplicadas.
Estive analisando a documentação e nada surgiu como uma solução. Eu também não consegui encontrar uma solução rápida em uma pesquisa SO / google
http://jsfiddle.net/CoryDanielson/tF5MH/
Solução:
// from & to input textboxes with datepicker enabled
var dates = $("input[id$='dpFrom'], input[id$='dpTo']");
// #clearDates is a button to clear the datepickers
$('#clearDates').on('click', function(){
dates.attr('value', '');
dates.each(function(){
$.datepicker._clearDate(this);
});
});
_.clearDate () é um método privado do objeto DatePicker. Você não o encontrará na API pública no site do jQuery UI, mas funciona perfeitamente.
fonte
this
está exatamente dentro de _clearDates ()Você tentou:
$('selector').datepicker('setDate', null);
Isso deve funcionar de acordo com a documentação da API
fonte
('setDate', null)
tenho o formato que quero (DD / MM / AAAA) , mas quando o uso tenho MM / DD / AAAA ... a única diferença é o uso de('setDate', null)
, alguma ideia do porquê?você só precisa definir as opções novamente para nulo:
dates.datepicker( "option" , { minDate: null, maxDate: null} );
Eu mudei seu jsfiddle: http://jsfiddle.net/tF5MH/9/
fonte
date.datepicker( "option" , {setDate: null, minDate: null, maxDate: null} );
$('.date').datepicker('setDate', null);
fonte
Tente alterar o código de compensação para:
$('#clearDates').on('click', function(){ dates.attr('value', ''); $("input[id$='dpFrom'], input[id$='dpTo']").datepicker( "option", "maxDate", null ); $("input[id$='dpFrom'], input[id$='dpTo']").datepicker( "option", "minDate", null ); });
fonte
Tente isto, isto adicionará o botão Clear no calendário Jquery que irá limpar a data.
$("#DateField").datepicker({ showButtonPanel: true, closeText: 'Clear', onClose: function (dateText, inst) { if ($(window.event.srcElement).hasClass('ui-datepicker-close')) { document.getElementById(this.id).value = ''; } } });
fonte
document.getElementById(this.id).value = '';
por$(this).val('').change();
torna-o ainda melhor, porque qualquer manipulador de alterações estabelecido também será chamado.Redefina os atributos de data máxima em seu selecionador de data ao clicar em limpar.
Do site jquery
Get or set the maxDate option, after init. //getter var maxDate = $( ".selector" ).datepicker( "option", "maxDate" ); //setter $( ".selector" ).datepicker( "option", "maxDate", '+1m +1w' );
fonte
Eu sei que é um pouco tarde, mas aqui está um trecho de código simples que fez isso por mim:
$('#datepicker-input').val('').datepicker("refresh");
fonte
A resposta óbvia foi a que funcionou para mim.
$('#datepicker').val('');
onde $ ('# datepicker') é o id do elemento de entrada.
fonte
.val('')
esvazia as entradas, mas não limpa as restrições do selecionador de data nos calendários.Uma versão modificada da solução de Leniel Macaferi para considerar a tecla backspace como um atalho de "página anterior" no IE8 quando um campo de texto não tem foco (o que parece ser o caso quando o selecionador de data está aberto).
Ele também usa
val()
para limpar o campo, pois_clearDate(this)
não funcionou para mim.$("#clearDates").datepicker().keyup(function (e) { // allow delete key (46) to clear the field if (e.keyCode == 46) $(this).val(""); // backspace key (8) causes 'page back' in IE8 when text field // does not have focus, Bad IE!! if (e.keyCode == 8) e.stopPropagation(); });
fonte
Minha inicialização do selecionador de data se parece com:
dateOptions = { changeYear: true, changeMonth: true, dateFormat: 'dd/mm/yy', showButtonPanel: true, closeText: 'Clear', };
Portanto, o botão padrão 'Concluído' terá o texto 'Limpar' .
Agora, em datepicker.js, localize a função interna '_attachHandlers'. Ela se parece com:
_attachHandlers: function (inst) { var stepMonths = this._get(inst, "stepMonths"), id = "#" + inst.id.replace(/\\\\/g, "\\"); inst.dpDiv.find("[data-handler]").map(function () { var handler = { prev: function () {...}, next: function () {...}, hide: function () { $.datepicker._hideDatepicker(); }, today: function () {...} ...
E mude a função de ocultar para se parecer com:
... hide: function () { $.datepicker._clearDate(id); $.datepicker._hideDatepicker(); }, ...
fonte
Eu uso este código para limpar o campo e todas as travessuras. Eu precisava de um campo vazio para meu caso de uso
jQuery.datepicker._clearDate(window.firstDay); window.firstDay.datepicker('setDate',null); window.firstDay[0].value = '';
Por algum motivo
.val('')
, não funcionaria para mim. Mas contornar o jQuery conseguiu. Em minha opinião, é uma falha não haver a opção .datepicker ('limpar').fonte
Minha maneira de resolver este problema
Alterar var 'controles' em ui.js
controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" + this._get(inst, "closeText") + "</button>" + "<button type='button' class='ui-datepicker-close ui-datepicker-clear ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" + this._get(inst, "clearText") + "</button>" : "");
Em seguida, adicione um clearText var
this.regional[""] = { // Default regional settings closeText: "Done", // Display text for close link clearText: "Clear", // Display text for close link prevText: "Prev", // Display text for previous month link
E antes de mostrar a função
$(".i_date").datepicker ( { beforeShow: function (input, inst) { setTimeout ( function () { $('.ui-datepicker-clear').bind('click', function() { $(input).val(''); }); }, 0 ); } } );
fonte
$("#datepicker").datepicker({ showButtonPanel: true, closeText: 'Clear', onClose: function () { var event = arguments.callee.caller.caller.arguments[0]; if ($(event.delegateTarget).hasClass('ui-datepicker-close')) { $(this).val(''); } } });
fonte
No Firefox, ele faz o trabalho para mim na forma (programaticamente), onde o controle do selecionador de data está desabilitado por padrão:
$("#txtDat2").prop('disabled', false); //temporary enable controls<br> $("#txtDat2").val("YYYY-MM-DD"); //reset date to dd.mm.yyyyy $("#txtDat2").prop('disabled', true); //back to default state
fonte
Tente esta solução; ela funcionará corretamente como eu tentei
$('selector').datepicker('setStartDate', 0); $('selector').datepicker('setEndDate', 0); $('selector').datepicker('update');
fonte