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

如何重置dateselect器日历值?最小和最大date限制?

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

我一直在整理文档,并没有跳出任何解决scheme。 我也无法findSO /谷歌search的快速解决scheme

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中find它,但它像一个魅力。

我试图完成这个事情,也就是清空datepicker,以便用户input的filter可以被删除。 谷歌search了一下,我发现这段甜蜜的代码:

即使在只读字段中也可以添加清除function。 只需将下面的代码添加到你的datepicker:

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

人们将能够突出显示(即使只读字段),然后使用退格键或删除键来删除使用_clearDate函数的date。

资源

你试过了吗:

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

这应该根据API文档工作

你只需要再次设置选项为空:

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

我改变了你的jsfiddle: http : //jsfiddle.net/tF5MH/9/

尝试将清除代码更改为:

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

试试这个,这将添加清除buttonJquery日历,这将清除date。

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

当您点击清除时,重置dateselect器上的最大date属性。

从jquery网站

 Get or set the maxDate option, after init. //getter var maxDate = $( ".selector" ).datepicker( "option", "maxDate" ); //setter $( ".selector" ).datepicker( "option", "maxDate", '+1m +1w' ); 

我知道这有点太晚了,但是代码的简单和平就是为我做的:

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

明显的答案是为我工作的那个。

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

$('#datepicker')是input元素的id。

Leniel Macaferi的解决scheme的一个修改版本解决了退格键在IE8中当文本字段没有焦点(这在datepicker打开的情况下就是这种情况)时是“返回”快捷键。

它也使用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(); }); 

我的datepicker初始化如下所示:

  dateOptions = { changeYear: true, changeMonth: true, dateFormat: 'dd/mm/yy', showButtonPanel: true, closeText: 'Clear', }; 

所以,默认的“完成”button将具有“清除”文本。

现在,在datepicker.js里面find内部函数'_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 () {...} ... 

并改变隐藏function如下所示:

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

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

我用这个代码来清除这个字段和所有的shenannigans。 我需要一个空的领域为我的用例

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

出于某种原因.val('')不适合我。 但绕过jQuery做到了。 在我看来,它是一个缺陷,没有.datepicker('清除')选​​项。

我的方法来解决这个问题

更改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 

和之前显示function

 $(".i_date").datepicker ( { beforeShow: function (input, inst) { setTimeout ( function () { $('.ui-datepicker-clear').bind('click', function() { $(input).val(''); }); }, 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(''); } } }); 

请尝试这个解决scheme,它会正常工作,因为我已经尝试过

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