2009-10-20 15 views
12

में वर्ष के क्रम को उलट देता है मेरे पास चेंजियर के साथ डेटपिकर है: सत्य। 'वर्ष' ड्रॉप डाउन 200 9 के रूप में शीर्षक प्रदर्शित करता है, फिर अगले वर्ष के बजाय 2008, 2007, 2006 के शीर्षक के नीचे और इसी तरह 1 999 से शुरू होता है और ऊपर की गणना करता है। मुझे इस आदेश को रिवर्स करने का आसान समाधान नहीं मिल रहा है?JQuery UI Datepicker, ड्रॉपडाउन

+0

मैं वास्तव में वर्षों का चयन करने के लिए ड्रॉपडाउन पर खराब उपयोगिता से नफरत करता हूं और आम तौर पर उनसे बचने की सलाह देता हूं। यहां क्यों है: http://www.useit.com/alertbox/20001112.html। –

+1

यह कैलेंडर पॉपअप के अंदर है, यह वास्तव में उपयोगकर्ता को तीन विकल्प देता है, या तो इसे स्वयं टाइप करें (जिसे उस आलेख में अनुशंसित किया गया है), इसे पॉपअप कैलेंडर से चुनें या वर्ष का चयन करने के लिए ड्रॉप डाउन का उपयोग करें। मुझे यकीन है कि एक उपयोगी समाधान है! – Lance

+0

http://stackoverflow.com/questions/42650410/jquery-datepicker-year-dropdown-starts-from-1900-and-i-want-it-to-start-from-the/42666011#42666011 मेरे अपने उत्तर की समीक्षा करें । उम्मीद है की यह मदद करेगा :) ! –

उत्तर

27

मैं मूल ui.datepicker.js को Cuong के रूप में संपादित करने की अनुशंसा नहीं करता क्योंकि सुझाव दिया गया है कि जैसे ही कोई नया डेवलपर रिलीज़ हो जाएगा, जैसे ही कोई नया डेवलपर फ़ाइल को बदल देता है। याद रखना कि पुनः आवेदन करने के लिए क्या अनुकूलन किए गए हैं व्यावहारिक नहीं है। इसके बजाय, आप तो जैसे अपनी खुद की अलग जे एस में मौजूदा _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 $('<div />').append(header).html(); 
} 

मैं सिर्फ कुछ के लिए यह लिखा मैं पर काम कर रहा हूँ और यह चाल अच्छी तरह से करता है :)

+0

शानदार काम करता है। – TARKUS

+0

thnx .... काम 4 मुझे (+1) – SHAZ

+0

// स्थिति के नीचे नीचे जोड़ें। अन्यथा वर्ष ड्रॉप नहीं होने पर प्रदर्शित नहीं होता है। यदि (years.is ('select')) years.html (Array.prototype.reverse.apply (years.children())); – trainer

4
  • ओपन फाइल ui.datepicker.js
  • विधि _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, selectedDate, secondary, monthNames, monthNamesShort)
  • विधि

    for (; year <= endYear; year++) { 
        html += '<option value="' + year + '"' + 
         (year == drawYear ? ' selected="selected"' : '') + 
         '>' + year + '</option>'; 
    } 
    
    html += '</select>'; 
    
  • सम्मिलित है कि पाश से पहले निम्न कोड में निम्नलिखित पाश खोजें खोजें:

    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. 
    
+0

ठीक वही है जो मैं आपको धन्यवाद देने के बाद था! – Lance

1

साथ for पाश की पहली पंक्ति बदलें:

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

मैं आप के लिए एक जवाब है, लेकिन यह वास्तव में क्या आप सुनना चाहते हो सकता है नहीं है।

एक समाधान है कि लटकती में साल का क्रम उलटने हैं के लिए इंटरनेट खोज के बाद, मैं इस के लिए आए हैं:

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

यह maxdate पूर्वचयनित होगा, और इसलिए एक साल आप करेंगे चुनने स्वचालित प्रविष्टि को स्वचालित रूप से देखें, इस प्रकार को पहले की तारीख चुनने के लिए स्क्रॉल करने में सक्षम होना।

संपादित करें: 65 साल पहले एक शुरुआती बिंदु बनाने के लिए वर्ष रेंज को मनमाने ढंग से जोड़ा जाता है। अधिकतम टिप्पणी को इस टिप्पणी को लिखने से 12 साल पहले की तारीख के रूप में मनमाने ढंग से भी चुना जाता है। असल में यह मेनू किसी को 12 से 65 वर्ष के बीच उम्र चुनने की अनुमति देगा।

यह आदर्श नहीं है, लेकिन यह काफी अच्छी तरह से काम करता है।

+0

अच्छा यह मेरे लिए ठीक काम करता है। –

5

मुझे लगता है कि बिना छेड़छाड़ किए प्लगइन को हैक करने का सबसे अच्छा तरीका साल के चयन आइटम पर इवेंट हैंडलर असाइन करना है।

//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); 
}); 

यह कोड ठीक काम करना चाहिए! : पी

1

समीक्षा मेरे अपने जवाब। उम्मीद है की यह मदद करेगा :) !

jQuery datepicker year dropdown starts from 1900 and I want it to start from the bottom

यह कैसे मैं मेरी समस्या हल है।और मुझे लगता है कि ऐसा क्यों jQuery इस "बग" फिक्सिंग नहीं कर रहे हैं क्योंकि वहाँ एक "रास्ता" साल अंतिम तिथि से आरंभ करने के लिए है:

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

अपने मूल कोड यहां पोस्ट की तुलना में इसके बजाए yearRange का उपयोग निश्चित वर्ष yearRange: "1900:-13" के रूप में करते हुए का उपयोग करना बेहतर है: "-70:"। और maxDate सेट करें। तो अब मुझे 2004 से शुरू होने वाले वर्ष का चयन बॉक्स और 1 9 00 नहीं है।

आशा है कि इससे दूसरों को वहां मदद मिलेगी।

पीएस: अन्य सभी समाधानों का परीक्षण किया गया है। वे बहुत धीमी हैं, और कुछ बहुत अच्छी तरह से काम नहीं करते हैं (विशेष रूप से पुराने - उदाहरण के लिए 2004 के बजाय वर्तमान वर्ष सेट करते हैं)।

+0

यह स्वीकार्य उत्तर होना चाहिए। –

संबंधित मुद्दे