jQuery年月日(生日)选择器

jerry JQuery 2015年08月20日 收藏

我们在编辑用户资料时经常会遇到选择生日选项的问题,今天我给大家介绍如何使用js来实现年月日(生日)选择器,能够准确计算闰年的年月日,方便表单处理。

HTML

生日中的年月日以<select>下拉方式,我们给每个select加个rel属性,当已知用户生日日期的,直接通过rel属性标注,插件会将rel属性值转换成select的值。

  1. <label> 生日:</label>
  2. <select class="sel_year" rel="2000"> </select>
  3. <select class="sel_month" rel="2"> </select>
  4. <select class="sel_day" rel="14"> </select>

加载jQuery库和选择器插件:

  1. <script src="jquery.js"></script>
  2. <script src="birthday.js"></script>

jQuery

我们将选择器封装成jQuyer插件的形式,只需使用以下方式调用即可:

  1. $(function () {
  2. $.ms_DatePicker({
  3. YearSelector: ".sel_year",
  4. MonthSelector: ".sel_month",
  5. DaySelector: ".sel_day"
  6. });
  7. });

以下是插件的具体代码:

  1. (function($){
  2. $.extend({
  3. ms_DatePicker: function (options) {
  4. var defaults = {
  5. YearSelector: "#sel_year",
  6. MonthSelector: "#sel_month",
  7. DaySelector: "#sel_day",
  8. FirstText: "--",
  9. FirstValue: 0
  10. };
  11. var opts = $.extend({}, defaults, options);
  12. var $YearSelector = $(opts.YearSelector);
  13. var $MonthSelector = $(opts.MonthSelector);
  14. var $DaySelector = $(opts.DaySelector);
  15. var FirstText = opts.FirstText;
  16. var FirstValue = opts.FirstValue;
  17. // 初始化
  18. var str = "<option value=\"" + FirstValue + "\">"+FirstText+"</option>";
  19. $YearSelector.html(str);
  20. $MonthSelector.html(str);
  21. $DaySelector.html(str);
  22. // 年份列表
  23. var yearNow = new Date().getFullYear();
  24. var yearSel = $YearSelector.attr("rel");
  25. for (var i = yearNow; i >= 1900; i--) {
  26. var sed = yearSel==i?"selected":"";
  27. var yearStr = "<option value=\"" + i + "\" " + sed+">"+i+"</option>";
  28. $YearSelector.append(yearStr);
  29. }
  30. // 月份列表
  31. var monthSel = $MonthSelector.attr("rel");
  32. for (var i = 1; i <= 12; i++) {
  33. var sed = monthSel==i?"selected":"";
  34. var monthStr = "<option value=\"" + i + "\" "+sed+">"+i+"</option>";
  35. $MonthSelector.append(monthStr);
  36. }
  37. // 日列表(仅当选择了年月)
  38. function BuildDay() {
  39. if ($YearSelector.val() == 0 || $MonthSelector.val() == 0) {
  40. // 未选择年份或者月份
  41. $DaySelector.html(str);
  42. } else {
  43. $DaySelector.html(str);
  44. var year = parseInt($YearSelector.val());
  45. var month = parseInt($MonthSelector.val());
  46. var dayCount = 0;
  47. switch (month) {
  48. case 1:
  49. case 3:
  50. case 5:
  51. case 7:
  52. case 8:
  53. case 10:
  54. case 12:
  55. dayCount = 31;
  56. break;
  57. case 4:
  58. case 6:
  59. case 9:
  60. case 11:
  61. dayCount = 30;
  62. break;
  63. case 2:
  64. dayCount = 28;
  65. if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) {
  66. dayCount = 29;
  67. }
  68. break;
  69. default:
  70. break;
  71. }
  72. var daySel = $DaySelector.attr("rel");
  73. for (var i = 1; i <= dayCount; i++) {
  74. var sed = daySel==i?"selected":"";
  75. var dayStr = "<option value=\"" + i + "\" "+sed+">" + i + "</option>";
  76. $DaySelector.append(dayStr);
  77. }
  78. }
  79. }
  80. $MonthSelector.change(function () {
  81. BuildDay();
  82. });
  83. $YearSelector.change(function () {
  84. BuildDay();
  85. });
  86. if($DaySelector.attr("rel")!=""){
  87. BuildDay();
  88. }
  89. } // End ms_DatePicker
  90. });
  91. })(jQuery);

下载地址