JQuery UI Datepicker,在下拉列表中颠倒年份的顺序

我有一个changeyear的datepicker:true。 “年度”下降显示标题为2009年,而不是明年低于标题的2008年,2007年,2006年等等,它从1999年开始并向上计数。 我似乎无法找到一个简单的解决方案来扭转这个顺序?

我不建议像Cuong建议的那样编辑原始的ui.datepicker.js,因为一旦你或其他开发人员在新版本发布时替换了文件,你的更改就会丢失。 记住为重新申请而进行的定制是不切实际的。 相反,您可以在您自己的单独JS中覆盖现有的_generateMonthYearHeader方法,如下所示:

 // store original so we can call it inside our overriding method $.datepicker._generateMonthYearHeader_original = $.datepicker._generateMonthYearHeader; $.datepicker._generateMonthYearHeader = function(inst, dm, dy, mnd, mxd, s, mn, mns) { var header = $($.datepicker._generateMonthYearHeader_original(inst, dm, dy, mnd, mxd, s, mn, mns)), years = header.find('.ui-datepicker-year'); // reverse the years years.html(Array.prototype.reverse.apply(years.children())); // return our new html return $('
').append(header).html(); }

我刚刚为我正在研究的东西写了这个,它很好地完成了诀窍:)

我认为在不翻录插件的情况下破解插件的最佳方法是为年份选择项分配一个事件处理程序。

 //Hack for reverting year order $(document.body).delegate('select.ui-datepicker-year', 'mousedown', function() { (function(sel) { var el = $(sel); var ops = $(el).children().get(); if ( ops.length > 0 && $(ops).first().val() < $(ops).last().val() ) { $(el).empty(); $(el).html(ops.reverse()); } })(this); }); 

这段代码必须正常工作! :P

  • 打开文件ui.datepicker.js
  • 找到方法_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, selectedDate, secondary, monthNames, monthNamesShort)
  • 在方法中找到以下循环

     for (; year <= endYear; year++) { html += ''; } html += ''; 
  • 在该循环之前插入以下代码:

     if (year-100 < 1900) // Check year is lower then 1900 year = 1950; // change start point of above loop, it helps you having the // year's dropdownlist starting at 1950, and ending of current year plus 10. 

我有答案,但这并不是你想听到的。

在互联网上寻找可以逆转下拉年份顺序的解决方案后,我来到这里:

 { changeMonth: true , changeYear: true , yearRange: '-65:' , maxDate: '1999/12/31' } 

这将预先选择maxdate,因此选择一年您将自动查看最后一个条目,从而能够向上滚动以选择较早的日期。

编辑:yearRange是任意添加的,以创建65年前的起点。 maxDate也是任意选择的,作为撰写此评论前12年的日期。 基本上这个菜单允许有人选择12到65岁的年龄。

它并不理想,但效果还不错。

for循环的第一行替换for

 var minYear = year; year = endYear; for (; year >= minYear; year--) { 

回顾我自己的答案。 希望这可以帮助 :) !

jQuery datepicker年份下拉列表从1900年开始,我希望它从底部开始

这就是我解决问题的方法。 我认为这就是为什么jQuery没有修复这个“Bug”的原因,因为有一种方法可以让这一年从最后一个日期开始:

 dateFormat: 'mm/dd/yy', changeMonth: true, changeYear: true, yearRange: "-70:", maxDate: "-13Y" 

与我在这里发布的原始代码相比,如果使用yearRange作为固定年份yearRange: "1900:-13" ,最好从下到上使用它: "-70:" 。 并设置maxDate 。 所以现在我从2004年开始我的年份选择框,而不是1900年。

希望这有助于其他人。

PS:所有其他解决方案都经过测试。 它们非常慢,有些不能很好地工作(特别是旧的 – 例如当前年份而不是2004年)。