jQuery-UIdateselect器默认date

我有一个jQuery-UIdateselect器的问题,我已经search和search,但我没有find答案。 我有以下代码:

<script type="text/javascript"> $(function() { $("#birthdate" ).datepicker({ changeMonth: true, changeYear: true, yearRange: '1920:2010', dateFormat : 'dd-mm-yy', defaultDate: '01-01-1985' }); }); </script> 

我希望当用户在#birthdateinput中点击当前select的date是01-01-1985 ,现在它设置当前date。

尝试传递一个Date对象。 我不明白为什么它不能以你input的格式工作:

 <script type="text/javascript"> $(function() { $("#birthdate" ).datepicker({ changeMonth: true, changeYear: true, yearRange: '1920:2010', dateFormat : 'dd-mm-yy', defaultDate: new Date(1985, 00, 01) }); }); </script> 

http://api.jqueryui.com/datepicker/#option-defaultDate

通过Date对象指定实际date,或者在当前的dateFormat中指定一个实际的date,或者指定从今天开始的天数(例如+7)或者一系列值和句点('y'多年,'m'多个月, 'w'表示数周,'d'表示数天,例如'+ 1m + 7d'),或者为空。

您可以尝试使用下面的代码。

这将使默认date成为你正在寻找的date。

 $('#birthdate').datepicker("setDate", new Date(1985,01,01) ); 

看见那个:

如果该栏位为空白,请在首次打开时将date设定为突出显示。 通过Date对象指定实际date,或者在当前的dateFormat中指定一个实际的date,或者指定从今天开始的天数(例如+7)或者一系列值和句点('y'多年,'m'多个月, 'w'表示数周,'d'表示数天,例如'+ 1m + 7d'),或者为空。

如果当前的dateFormat不被识别,你仍然可以使用Date对象使用new Date(year, month, day)

在你的例子中,这应该工作(我没有testing它):

 <script type="text/javascript"> $(function() { $("#birthdate" ).datepicker({ changeMonth: true, changeYear: true, yearRange: '1920:2010', dateFormat : 'dd-mm-yy', defaultDate: new Date(1985,01,01) }); }); </script> 

jQuery UI Datepicker被编码为始终使用类ui-state-highlight来突出显示用户的本地date。 没有内置的选项来改变这一点。

在其他相关问题的答案中,类似地描述了一种方法,就是覆盖该类的CSS以匹配主题的ui-state-default ,例如:

 .ui-state-highlight { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; color: #555555; } 

但是,如果您使用的是dynamic主题,或者您的目标是突出显示不同的一天(例如,“今天”基于您的服务器的时钟而不是客户端的时钟),则这不是很有用。

另一种方法是重写负责突出显示当天的dateselect器原型。

假设您正在使用UI javascript的最小化版本,下面的代码片段可以解决这些问题。


如果您的目标是防止突出显示当天的事情:

 // copy existing _generateHTML method var _generateHTML = jQuery.datepicker.constructor.prototype._generateHTML; // remove the string "ui-state-highlight" _generateHtml.toString().replace(' ui-state-highlight', ''); // and replace the prototype method eval('jQuery.datepicker.constructor.prototype._generateHTML = ' + _generateHTML); 

这改变了相关的代码(为了可读性而未被最小化):

 [...](printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') + [...] 

 [...](printDate.getTime() == today.getTime() ? '' : '') + [...] 

如果你的目标是改变datepicker的“今天”的定义:

 var useMyDateNotYours = '07/28/2014'; // copy existing _generateHTML method var _generateHTML = jQuery.datepicker.constructor.prototype._generateHTML; // set "today" to your own Date()-compatible date _generateHTML.toString().replace('new Date,', 'new Date(useMyDateNotYours),'); // and replace the prototype method eval('jQuery.datepicker.constructor.prototype._generateHTML = ' + _generateHTML); 

这改变了相关的代码(为了可读性而未被最小化):

 [...]var today = new Date();[...] 

 [...]var today = new Date(useMyDateNotYours);[...] // Note that in the minimized version, the line above take the form `L=new Date,` // (part of a list of variable declarations, and Date is instantiated without parenthesis) 

而不是useMyDateNotYours你当然也可以注入一个string,函数,或任何适合您的需求。

jquery Datepicker的defaultDate只设置默认的date,你点击你的领域时popup的日历上select。 如果你想在你input的默认dateAPPEAR之前,用户点击字段,你应该给你的领域val()。 像这样的东西:

 $("#searchDateFrom").datepicker({ defaultDate: "-1y -1m -6d" }); $("#searchDateFrom").val((date.getMonth()) + '/' + (date.getDate() - 6) + '/' + (date.getFullYear() - 1)); 

如果要根据某些服务器时间将突出显示的date更新为不同date,则可以覆盖Date Picker代码以允许一个名为localToday的新自定义选项,或者任何您想要命名的选项。

对jQuery UI DatePicker中所选答案的小调整突出显示“today”date

 // Get users 'today' date var localToday = new Date(); localToday.setDate(tomorrow.getDate()+1); // tomorrow // Pass the today date to datepicker $( "#datepicker" ).datepicker({ showButtonPanel: true, localToday: localToday // This option determines the highlighted today date }); 

我已经覆盖了2个datepicker方法来有条件地使用“today”date而不是new Date()的新设置。 新的设置被称为localToday

覆盖$.datepicker._gotoToday$.datepicker._generateHTML像这样:

 $.datepicker._gotoToday = function(id) { /* ... */ var date = inst.settings.localToday || new Date() /* ... */ } $.datepicker._generateHTML = function(inst) { /* ... */ tempDate = inst.settings.localToday || new Date() /* ... */ } 

这是一个演示 ,显示完整的代码和用法: http : //jsfiddle.net/NAzz7/5/