jQuery Datepicker中的Todaybutton不起作用
我正在使用jQueryUI Datepicker并显示“今天”button。 但它不起作用。 它也不能在演示中工作: http : //www.jqueryui.com/demos/datepicker/#buttonbar
当按下此button时,我要在今天填写input。
是否有可能得到它的工作?
他们的代码并没有真正被破坏。 它只是没有做大多数人所期望的事情。 将今天的dateinput到input框中。 它所做的是突出显示用户在日历上看到今天的date。 如果他们在另一个月或另一年closures,则日历将popup回到当前视图,而不会取消select用户已select的date。
为了使它更直观,您需要更新插件代码以满足您的需求。 让我知道如何去。
你需要得到jquery-ui javascript的未压缩版本。 我正在看版本1.7.2和“_gotoToday”函数是在行6760上。只要将一个调用添加到_gotoToday,引发线6831上的_selectDate()函数。:)快乐编码。
我不喜欢修改jQuery源代码的解决scheme,因为它消除了使用CDN的能力。 相反,您可以通过在您的页面的JavaScript范围文件中的某处添加基于@meesterjeeves的代码来重新分配_gotoToday函数:
$.datepicker._gotoToday = function(id) { var target = $(id); var inst = this._getInst(target[0]); if (this._get(inst, 'gotoCurrent') && inst.currentDay) { inst.selectedDay = inst.currentDay; inst.drawMonth = inst.selectedMonth = inst.currentMonth; inst.drawYear = inst.selectedYear = inst.currentYear; } else { var date = new Date(); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); // the below two lines are new this._setDateDatepicker(target, date); this._selectDate(id, this._getDateDatepicker(target)); } this._notifyChange(inst); this._adjustDate(target); }
上面的代码基本上与1.10.1版本中的jQuery UI Datepicker相同,除了上面的两行代码。 因为这个选项对于我们今天的新含义是没有意义的,所以我们可以把gotoCurrent
的整个gotoCurrent
掉掉。
我认为处理这个问题的最好方法是重写库本身之外的_goToToday方法。 这解决了我的问题:
var old_goToToday = $.datepicker._gotoToday $.datepicker._gotoToday = function(id) { old_goToToday.call(this,id) this._selectDate(id) }
简单,并不要求你破解任何事件或改变任何基础function
只需将以下两行代码添加到_gotoToday函数中即可
/* Action for current link. */ _gotoToday: function(id) { var target = $(id); var inst = this._getInst(target[0]); if (this._get(inst, 'gotoCurrent') && inst.currentDay) { inst.selectedDay = inst.currentDay; inst.drawMonth = inst.selectedMonth = inst.currentMonth; inst.drawYear = inst.selectedYear = inst.currentYear; } else { var date = new Date(); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); } this._notifyChange(inst); this._adjustDate(target); /* ### CUSTOMIZATION: Actually select the current date, don't just show it ### */ this._setDateDatepicker(target, new Date()); this._selectDate(id, this._getDateDatepicker(target)); },
虽然我知道这已经被接受,但这是基于Samy Zine的想法的扩展解决scheme。 这是使用jQuery 1.6.3和jQuery UI 1.8.16,并在Firefox 6中为我工作。
$('.ui-datepicker-current').live('click', function() { // extract the unique ID assigned to the text input the datepicker is for // from the onclick attribute of the button var associatedInputSelector = $(this).attr('onclick').replace(/^.*'(#[^']+)'.*/gi, '$1'); // set the date for that input to today's date var $associatedInput = $(associatedInputSelector).datepicker("setDate", new Date()); // (optional) close the datepicker once done $associatedInput.datepicker("hide"); });
你也可以blur()
$associatedInput
并把焦点放在页面中的下一个input/select上,但是这样做通常是不重要的,或者是特定于实现的。
作为一个例子,我在一个页面上做了这个工作,使用表格来布局(不要让我开始,我知道这是不好的做法!):
$associatedInput.closest('tr').next('tr').find('input,select').first().focus();
我不喜欢为jQuery源代码添加额外代码的想法。 我不希望覆盖_gotoToday
方法,通过在JavaScript代码的某处复制粘贴其实现,并在底部添加额外的行。
所以,我用这个代码调整了它:
(function(){ var original_gotoToday = $.datepicker._gotoToday; $.datepicker._gotoToday = function(id) { var target = $(id), inst = this._getInst(target[0]); original_gotoToday.call(this, id); this._selectDate(id, this._formatDate(inst, inst.selectedDay, inst.drawMonth, inst.drawYear)); } })();
文件说什么“今天”button哪个标题可以通过改变
.datepicker('option', 'currentText', 'New Title')
只显示当前月份的变化。 这种行为也可以configuration
.datepicker('option', 'gotoCurrent', true);
之后按下button将显示月份更改为选定date的一个。
看来用这个button提交date是不可能的devise。
我为此目的添加了一个选项到datepicker:selectCurrent。
为了做到这一点,你只需要添加下面的解压缩js文件:
1)在函数Datepicker()的末尾添加:
selectCurrent: false // True to select the date automatically when the current button is clicked
2)在_gotoToday函数结束时,添加:
if (this._get(inst, 'selectCurrent')) this._selectDate(id, this._formatDate(inst, inst.selectedDay, inst.drawMonth, inst.drawYear));
我刚摆脱它。
在您的页面的一部分的一些CSS文件中:
.ui-datepicker-current { visibility:hidden }
您也可以尝试下面的代码以在点击今日button的input框中填写当前date。 只需将下面的代码放在_gotoToday
函数中(在函数的结尾处)。
this._selectDate(id, this._formatDate(inst, inst.selectedDay, inst.drawMonth, inst.drawYear));
请注意,我使用jQuery的datepicker版本1.8.5。
jQuery UIdateselect器今天链接
$('button.ui-datepicker-current').live('click', function() { $.datepicker._curInst.input.datepicker('setDate', new Date()).datepicker('hide').blur(); });
dateselect器被重构为至less10倍更棒。 新版本将解决这个问题。
您也可以尝试将其添加到脚本中:
$('.ui-datepicker-current').live('click', function() { $(".datepicker").datepicker("setDate", date); });
(使用.livefunction而不是.click)
这是一个对我来说使用dateselect器的beforeShowcallback函数,而不是live()方法。
,beforeShow: function(input, datepicker) { setTimeout(function() { datepicker.dpDiv.find('.ui-datepicker-current') .text('Select Today') .click(function() { $(input) .datepicker('setDate', new Date()) .datepicker('hide'); }); }, 1); return {}; }
$.datepicker._gotoToday = function(id) { var inst = this._getInst($(id)[0]); var date = new Date(); this._selectDay(id, date.getMonth(), date.getFullYear(), inst.dpDiv.find('td.ui-datepicker-today')); } $.datepicker.setDefaults({ changeMonth: true, maxDate: 'today', numberOfMonths: 1, showButtonPanel: true });
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" /> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script> <input type="text" id="id">
这是一个简单的黑客攻击
$(function() { var _gotoToday = $.datepicker._gotoToday; $.datepicker._gotoToday = function(a){ var target = $(a); var inst = this._getInst(target[0]); _gotoToday.call(this, a); $.datepicker._selectDate(a, $.datepicker._formatDate(inst,inst.selectedDay, inst.selectedMonth, inst.selectedYear)); target.blur(); } $( “#datepicker” ).datepicker({ showButtonPanel: true }); });
你应该使用选项:todayBtn:“linked”。 (而不是todayBtn:true)。
todayBtn布尔值,“链接”。 默认:false
如果为真或“链接”,则在dateselect器的底部显示“今日”button以select当前date。 如果为true,则“今天”button将只将当前date移动到视图中; 如果“链接”,当前date也将被选中。
有关更多详情,请参阅以下链接: http : //bootstrap-datepicker.readthedocs.io/en/latest/options.html#todaybtn
(请注意,这不是一个问题,我试图通过提供我的解决scheme来提供帮助,因为其他解决scheme对我不起作用。)
我无法让dateselect器与其他任何答案保持隐藏。 日历将closures,然后重新打开。 下面的代码为我工作改变今天button设置date到当天和closures日历。
jQuery UI – v1.11.4 jQuery JavaScript Library v1.11.1 IE 11.0.28
我已经包含了我的默认完整性。
$.datepicker._gotoToday = function(id) { var inst = this._getInst($(id)[0]); var date = new Date(); this._selectDay(id, date.getMonth(), date.getFullYear(), inst.dpDiv.find('td.ui-datepicker-today')); } $.datepicker.setDefaults({ changeMonth: true, maxDate: 'today', numberOfMonths: 1, showButtonPanel: true });
- Twitter引导dateselect器
- Chrome中不显眼的validation不会以dd / mm / yyyy进行validation
- jquery datepicker根据第一个date字段中的选定date限制第二个date字段中的date
- 多个DatePickers在同一个活动
- 使用jQuery的dateselect器在特定范围内突出显示date
- 模式窗口内的Twitter Bootstrap Datepicker
- jQuery UI Datepicker – 多个dateselect
- 如何在使用jQuery UI Datepicker时使用小时,分钟和秒来格式化date?
- 带有不允许用户input的文本input的jQuery Datepicker