jQuery select年月日(生日)选择器

来源:互联网 发布:家装cad平面设计软件 编辑:程序博客网 时间:2024/06/06 03:45


实际项目中,在用户的个人中心,编辑用户资料时经常会遇到选择生日选项的问题。

因为我项目工程中没有使用如jQuery UI的插件性下拉列表,所以选择select + option的原生方式,实现选择器。

能够准确计算闰年的年月日,方便表单处理。

实际效果如下图,式样略粗糙偷笑


HTML

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

[html] view plaincopyprint?
  1. <select id="date-sel-year" rel="2015"></select>年  
  2. <select id="date-sel-month" rel="9"></select>年  
  3. <select id="date-sel-day" rel="10"></select>年  
jQuery

[javascript] view plaincopyprint?
  1. $.date_picker({  
  2.      YearSelector:  "#date-sel-year",  
  3.      MonthSelector: "#date-sel-month",  
  4.      DaySelector:   "#date-sel-day"  
  5. });  
  6. $.ms_DatePicker();  

******

实际使用,最终提交时,需要获得用户输入的生日,直接 $('#date-sel-year').val() 可以获得select的内容,

有时页面逻辑是,显示生日,用户点击 [编辑] 按钮后,初始化select的内容,此时用 $('#date-sel-year').val(year) 可以完成赋值的操作。

这时候,需要注意的是,很多生日显示时,会显示为,2015-09-01,但是直接赋值 09 给date-sel-month,是不能正确显示的。

需要判断如果变量第一个字符是0,要将第二位的字符赋值给select。

******

以下是插件的具体代码:

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




转载于:http://blog.csdn.net/ld_____/article/details/48346683

0 0
原创粉丝点击