2010-10-28 91 views
1

我有一個使用jqueryui DatePicker的Datepicker。jQueryUI DatePicker自定義年

行爲的要求是:

  • 用戶可以存儲生日的朋友。如果已知,用戶應該能夠存儲一年,或選擇「不適用」。

  • 如果選擇「不適用」,請將1900年存儲在數據庫中,並且只在用戶的輸入字段中顯示日期和月份。

  • 下拉應該開始於1950年,但顯示從當前日期在過去的100年(< - 這將上錦上添花,否則在啓動當年,如果需要回到1900年)

這是我到目前爲止,但它kludgey ...這是一個輕描淡寫。由於某種原因,如果用戶選擇日期,但不改變年份下拉,那麼當前年份將被存儲,而不是1900年。

(它在json調用的上下文中)。當然有更好的方法。

var birthday_options = {changeMonth: true, changeYear: true, yearRange: '1900:2010', 
     onClose: function(dateText, inst) { 
     contact.field_updater('birthday').call(this); 
     $('input.mng-birthday').val(function(i, val) { 
         return val.replace('/1900', ''); 
        }); 
     }, 
     beforeShow: function (input) { 
         setTimeout(function() { 
         $('select.ui-datepicker-year option:first').text('N/A');                 
         }, 1); 
        }}, 

.find('.mng-birthday').val(data.birthday || 'Unknown') 
    .datepicker(birthday_options) 
.end(); 

回答

0

Click here to see a demo.

當你發現自己超出範圍時,jQuery UI的來源是很容易修改。你只需要改變函數定義爲_generateMonthYearHeader:

// StackOverflow question: Add option for N/A 
html += '<option value="1900">N/A</option>'; 

,使這個改變_selectDay到ommit年當選擇N/A。

// StackOverflow question: format the date 
if (inst.currentYear == 1900) 
    this._selectDate(id, (inst.currentMonth + 1) + "/" + inst.currentDay); 
else 
    this._selectDate(id, this._formatDate(inst, inst.currentDay, 
        inst.currentMonth, inst.currentYear)); 

在你的核心用戶界面腳本,修改後的datpicker腳本,安裝腳本面板:

$(document).ready(function() { 
    var year = new Date().getFullYear(); 

    $(".mng-birthday").datepicker({ 
     changeYear: true, 
     // The year range is from the current year to 100 years before 
     yearRange: (year - 100) + ":" + year, 
     // The default date is january 1st fifty years before the current year 
     defaultDate: "01/01/1900" 
    }); 
}); 
+0

我看這應該是如何工作的,顯然不會對演示,但是我繼續去選擇2016年,當我選擇N/A。 – kinet 2010-10-28 23:07:41