Проблема заключается в том, что при очистке дат (путем удаления значений текстового поля) применяются ограничения на предыдущую дату.
Я сортировал документацию и ничего не выпрыгивал как решение. Я также не смог быстро найти решение SO/google
http://jsfiddle.net/CoryDanielson/tF5MH/
// 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() - частный метод объекта DatePicker. Вы не найдете его в публичном API на веб-сайте пользовательского интерфейса jQuery, но он работает как шарм.
Я пытался выполнить это, т.е. пустым параметром datepicker, чтобы фильтры, введенные пользователем, могли быть удалены. Популяция немного я нашел этот сладкий кусок кода:
Вы можете добавить функцию очистки даже в поля только для чтения. Просто добавьте следующий код к вашему datepicker:
}).keyup(function(e) {
if(e.keyCode == 8 || e.keyCode == 46) {
$.datepicker._clearDate(this);
}
});
Люди смогут выделить (даже поля "Только для чтения" ), а затем использовать клавишу "Backspace" или "Удалить", чтобы удалить дату с помощью функции _clearDate
.
Вы пытались:
$('selector').datepicker('setDate', null);
Это должно работать в соответствии с API-документацией
('setDate', null)
меня есть ('setDate', null)
формат (ДД / ММ / ГГГГ) , но когда я использую его, у меня MM / DD / YYYY ... единственная разница - использование ('setDate', null)
, есть идеи, почему?
вам просто нужно снова установить параметры в значение null:
dates.datepicker( "option" , {
minDate: null,
maxDate: null} );
Я изменил ваш jsfiddle: http://jsfiddle.net/tF5MH/9/
date.datepicker( "option" , {setDate: null, minDate: null, maxDate: null} );
Попробуйте изменить код очистки:
$('#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 );
});
$('.date').datepicker('setDate', null);
Попробуйте это, Это добавит кнопку "Очистить" в календаре JQuery, который очистит дату.
$("#DateField").datepicker({
showButtonPanel: true,
closeText: 'Clear',
onClose: function (dateText, inst) {
if ($(window.event.srcElement).hasClass('ui-datepicker-close'))
{
document.getElementById(this.id).value = '';
}
}
});
document.getElementById(this.id).value = '';
с $(this).val('').change();
делает его еще лучше, потому что тогда также будут вызваны все установленные обработчики изменений.
Reset максимальные атрибуты даты на вашем datepicker, когда вы нажимаете кнопку очистки.
С веб-сайта jquery
Get or set the maxDate option, after init.
//getter
var maxDate = $( ".selector" ).datepicker( "option", "maxDate" );
//setter
$( ".selector" ).datepicker( "option", "maxDate", '+1m +1w' );
Пожалуйста, попробуйте это решение, оно будет работать правильно, как я пробовал
$('selector').datepicker('setStartDate', 0);
$('selector').datepicker('setEndDate', 0);
$('selector').datepicker('update');
$("#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('');
}
}
});
Очевидным ответом был тот, который работал у меня.
$('#datepicker').val('');
где $('# datepicker') - это идентификатор входного элемента.
.val('')
входные данные, но не очистит ограничения .val('')
в календарях.
Я знаю это слишком поздно, но вот простой мир кода, который сделал это для меня:
$('#datepicker-input').val('').datepicker("refresh");
Мой способ решить эту проблему
Измените var 'controls' на 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>" : "");
Затем добавьте 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
И перед функцией show
$(".i_date").datepicker
(
{
beforeShow: function (input, inst)
{
setTimeout
(
function ()
{
$('.ui-datepicker-clear').bind('click', function() { $(input).val(''); });
},
0
);
}
}
);
Я использую этот код, чтобы очистить поле и все shenannigans. Мне нужно пустое поле для моего использования.
jQuery.datepicker._clearDate(window.firstDay);
window.firstDay.datepicker('setDate',null);
window.firstDay[0].value = '';
По какой-то причине .val('')
не будет работать для меня. Но обход jQuery сделал это.
По моему мнению, его недостаток в том, что нет опции .datepicker( "clear" ).
Моя инициализация datepicker выглядит следующим образом:
dateOptions = {
changeYear: true,
changeMonth: true,
dateFormat: 'dd/mm/yy',
showButtonPanel: true,
closeText: 'Clear',
};
Таким образом, кнопка "Готово" по умолчанию будет иметь текст "Очистить".
Теперь внутри datepicker.js найдите внутреннюю функцию '_attachHandlers' Это выглядит так:
_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 () {...}
...
И измените функцию скрыть, чтобы выглядеть так:
...
hide: function () {
$.datepicker._clearDate(id);
$.datepicker._hideDatepicker();
},
...
Измененная версия решения Leniel Macaferi для учета того, что ключ backspace является ярлыком "назад страницы" в IE8, когда текстовое поле не имеет фокуса (что, как представляется, происходит, когда датапикер открыт).
Он также использует val()
, чтобы очистить поле, так как _clearDate(this)
не работал у меня.
$("#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();
});