如何清除/重置jQuery UI Datepicker日历上的选定日期?


85

如何重置日期选择器日历值?..最小和最大日期限制?

问题是当我清除日期(通过删除文本框值)时,以前的日期限制仍然适用。

我一直在整理文档,没有任何解决方案。我也无法在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对象的私有方法。您不会在jQuery UI网站的公共API中找到它,但是它的作用就像一个魅力。

Answers:


86

我正在尝试完成此操作,即清空日期选择器,以便可以删除用户输入的过滤器。仔细搜索一下,我发现了这段甜蜜的代码:

您甚至可以在只读字段上添加清除功能。只需将以下代码添加到日期选择器中即可:

}).keyup(function(e) {
    if(e.keyCode == 8 || e.keyCode == 46) {
        $.datepicker._clearDate(this);
    }
});

人们将能够突出显示(甚至是只读字段),然后使用退格键或Delete键使用_clearDate功能删除日期。

资源


9
哇。为什么不公开?!jQuery UI上的API也排除了它。...没有任何意义。----我编辑了您的帖子,以便解决方案更好地符合我的问题。非常好的发现
Cory Danielson

接受我的修改,我调整了您的答案以匹配我的问题,而不是复制/粘贴不完整代码的副本
Cory Danielson 2012年

您的编辑是否已经激活?我看不到接受您的编辑的选项... :)
Leniel Maccaferri

3
不,没关系。我认为原始帖子中包含的解决方案以及您的解决方案都将对几乎所有找到此页面的人有所帮助。可能是有关keyCode 8和46或this_clearDates()内到底是什么的一些评论
Cory Danielson

1
你到底把它放在哪里?
w0051977 17/09/14

63

你试过了吗:

$('selector').datepicker('setDate', null);

应该根据API文档工作


我有一个带有一些日期选择器输入的表单,用于编辑要根据当前日期填写的某个日期。我发现此解决方案可以在使用带有当前日期的“ setDate”之前重置我的编辑表单,但是我遇到了格式问题:没有,('setDate', null)我有我想要的格式(DD / MM / YYYY),但是当我使用MM时/ DD / YYYY ...唯一的区别是使用('setDate', null),知道为什么吗?
的MickaëlLeger的

抱歉,Mickael-我不知道。您是否按照stackoverflow.com/questions/1328025/…尝试将日期设置为null之后重设格式?
DavidWainwright

22

您只需要再次将选项设置为null:

dates.datepicker( "option" , {
    minDate: null,
    maxDate: null} );

我已经更改了您的jsfiddle:http : //jsfiddle.net/tF5MH/9/


是的,谢谢。你是对的。有趣的是,这个问题甚至存在于jQuery UI Datepicker Demo页面上。jqueryui.com/demos/datepicker/#date-range将日期设置为日期,然后清空文本框,则问题存在
Cory Danielson 2012年

1
当然,这是最干净的方法。 date.datepicker( "option" , {setDate: null, minDate: null, maxDate: null} );
AL3X


10

尝试将清除代码更改为:

$('#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 );
});

8

试试这个,这将在将清除日期的Jquery日历上添加清除按钮。

$("#DateField").datepicker({
    showButtonPanel: true,
    closeText: 'Clear',
         onClose: function (dateText, inst) {
        if ($(window.event.srcElement).hasClass('ui-datepicker-close'))
        {
            document.getElementById(this.id).value = '';
        }
    }
});

1
即使在Firefox中不起作用,此答案也可能比其他答案更好。并替换document.getElementById(this.id).value = '';$(this).val('').change();它会更好,因为那时任何已建立的更改处理程序也会被调用。
瑞安

3

单击清除时,重置日期选择器上的最大日期属性。

从jQuery网站

Get or set the maxDate option, after init.

    //getter
    var maxDate = $( ".selector" ).datepicker( "option", "maxDate" );
    //setter
    $( ".selector" ).datepicker( "option", "maxDate", '+1m +1w' );

是的,你是正确的。我将j08691标记为最佳答案,因为他给了我一些我可以拍成小提琴的代码。不幸的是,我无法将它们都标记为最佳:/
Cory Danielson

是的,我知道,相对于您的问题,我将使用一些代码更好地解释它,但是他击败了我。:)
Mark W

3

我知道为时已晚,但是这里有一个简单的代码为我做到了:

$('#datepicker-input').val('').datepicker("refresh");

我看不到刷新有任何其他作用。您可以清除该值。
omarjebari

1
我喜欢您正在使用公共调用与私有函数来清除控件。
snowYetis

1
@Miguel BinPar,我知道这篇文章很旧,但是您的答案是在试图弄清楚这三天后唯一对我有用的答案。谢谢!
kejo

3

显而易见的答案是对我有用的答案。

$('#datepicker').val('');

其中$('#datepicker')是输入元素的ID。


我在JSFiddle中尝试了该解决方案,但没有成功。jsfiddle.net/tF5MH/407请参见输入下方的复制步骤。使用.val('')将清空输入,但不会清除日历中的日期选择器限制。
科里·丹尼尔森,2013年

我还尝试了最新版本的jQuery UI(v1.12.0),但没有用。
科里·丹尼尔森

非常感谢奥马尔。最近20分钟以来,我一直在搜索此工作解决方案。你是一个救命的人!..
Mahesh

0

Leniel Macaferi解决方案的修改版,用于解决当文本字段没有焦点时(在打开日期选择器时的情况),IE8中的退格键是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();
});

0

我的日期选择器初始化看起来像:

    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函数更改为:

                   ...
                   hide: function () {
                        $.datepicker._clearDate(id);
                        $.datepicker._hideDatepicker();
                    },
                    ...

解决方案来自此* data-handler =“ hide” *


0

我使用此代码清除该字段和所有诡计。我的用例需要一个空字段

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

由于某种原因,.val('')这对我不起作用。但是绕过jQuery做到了。我认为,没有.datepicker('clear')选项是一个缺陷。


0

解决这个问题的方法

在ui.js上更改var'controls'

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

和之前显示功能

$(".i_date").datepicker
(
    {
        beforeShow: function (input, inst)
        {
            setTimeout
            (
                function () 
                { 
                    $('.ui-datepicker-clear').bind('click', function() { $(input).val(''); });
                }, 
                0
            );
        }
    }
);

0
$("#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

在Firefox中,它以表格形式(以编程方式)对我有用,默认情况下,日期选择控件处于禁用状态:

$("#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

-1

请尝试此解决方案,它将按照我的尝试正常运行

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

 $('selector').datepicker('setEndDate', 0);
$('selector').datepicker('update');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.