Как очистить / сбросить выбранные даты в календаре jQuery UI Datepicker? - PullRequest
77 голосов
/ 24 февраля 2012

Как сбросить значения календаря средства выбора даты? .. Ограничения на минимальную и максимальную даты?

Проблема заключается в том, что когда я очищаю даты (удаляя значения текстового поля), прежние ограничения на дату все ещеПрименено.

Я перебираю документацию , и ничего не выскочило в качестве решения.Я также не смог найти быстрое исправление в поиске 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 UI, но он работает как шарм.

Ответы [ 16 ]

0 голосов
/ 13 сентября 2017

Пожалуйста, попробуйте это решение, оно будет работать правильно, как я пытался

$('selector').datepicker('setStartDate', 0);

 $('selector').datepicker('setEndDate', 0);
$('selector').datepicker('update');
0 голосов
/ 09 марта 2017
$("#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('');
            }
        }
    });
0 голосов
/ 05 октября 2015

Мой способ решить эту проблему

Изменить 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>" : "");

Затем добавьте текстовый текст 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

А перед функцией шоу

$(".i_date").datepicker
(
    {
        beforeShow: function (input, inst)
        {
            setTimeout
            (
                function () 
                { 
                    $('.ui-datepicker-clear').bind('click', function() { $(input).val(''); });
                }, 
                0
            );
        }
    }
);
0 голосов
/ 30 марта 2015

Я использую этот код для очистки поля и всех шенанниганов.Мне нужно пустое поле для моего варианта использования

jQuery.datepicker._clearDate(window.firstDay);
window.firstDay.datepicker('setDate',null);
window.firstDay[0].value = '';

По какой-то причине .val('') не будет работать для меня.Но в обход jQuery это сделали.На мой взгляд, недостаток в том, что нет опции .datepicker ('clear').

0 голосов
/ 20 января 2015

My 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();
                    },
                    ...

The solution came from this *data-handler=

0 голосов
/ 07 августа 2014

Модифицированная версия решения Лениэля Макафери, учитывающая, что клавиша 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();
});
...