2012-12-13 9 views
5

Es nervt mich wirklich, dass die jQuery Datepicker eine Auswahlbox hat den Monat zu ändern, aber es zeigt nicht den vollen Monatsnamen (aber es funktioniert in den anderen Monaten).jQuery Datepicker - Zeigen Sie vollen Monatsnamen in Auswahlbox

Screenshot:http://i.imgur.com/Pdkq0.png

Gibt es einen Weg, um die Datumsauswahl anpassen, um die vollen Monatsnamen zu zeigen, ohne den Quellcode zu modifizieren?

+0

Sie wissen, es ist wirklich schwer, ein Bild zu debuggen ... –

+0

Sie brauchen nicht zu alles debuggen. Ich frage, wie man den jQuery UI Datepicker anpasst. – BadHorsie

+0

Ok, ich wusste nicht, es ist eine originale Option in Datepicker, ich dachte, es war ein Brauch, so traurig –

Antwort

9

Vielleicht ein ein bisschen spät, aber ich hatte das gleiche Problem in diesem Moment und es war ziemlich einfach behoben. Bevor Sie die Datumsauswahl-Funktion, die von Monats- Array erhalten nennen, sie in eine neue Variable setzen und Kurznamen auf diese Variable durch den Aufruf ändern:

var fullmonth_array = $.datepicker.regional['nl'].monthNames; // change 'nl' to your own language of course 
$('input[name="date-of-birth"]').datepicker(
{ 
    changeYear    : true, 
    changeMonth    : true, 
    yearRange    : "-85:-18", 
    maxDate     : "-18Y", 
    minDate     : "-85Y", 
    monthNamesShort   : fullmonth_array 
    // other stuff 
} 
+1

Wenn jemand trifft Damit dies heutzutage funktioniert, sollten Sie '$ .datepicker.regional ['nl']. monateNames' in' $ .datepicker._defaults.monthNames' ändern –

1

Dont besseren Weg finden als UI Datumsauswahl zu aktualisieren, aber das gibt Ihnen die Idee:

DEMO

var months = ["January", "February", "March", "April", "May", "June", 
        "July", "August", "September", "October", "November", "December"]; 
var uDatepicker = $.datepicker._updateDatepicker; 
$.datepicker._updateDatepicker = function() { 
    var ret = uDatepicker.apply(this, arguments); 
    var $sel = this.dpDiv.find('select'); 
    $sel.find('option').each(function(i) { 
     $(this).text(months[i]); 
    }); 
    return ret; 
}; 

$(function() { 
    $("#id").datepicker({ 
     changeMonth: true, 
     dateFormat: 'MM yy' 
    }); 
});​ 
+0

Danke, das funktioniert, außer es ist nicht ganz richtig. Die Monate sind falsch, wenn das Auswahlmenü keine 12 Monate enthält. Wenn der aktuelle Monat beispielsweise Dezember ist, wird nur Dezember im Auswahlmenü angezeigt, aber gemäß Ihrem Skript wird es "Januar" genannt. Um zu beheben, $ (this) .text (monates [i]); muss '$ (this) sein .text (monates [$ (this) .attr ('value')]);' – BadHorsie

0

Sie können Attribut "monthNamesShort" wie definieren:

$(".selector").datepicker({ 
    monthNamesShort: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] 
}); 
1

Sie die Datumsauswahl erweitern können und „überschreiben“ die fehlerhafte Funktion, auf lange vorbei Namen.

$.extend($.datepicker, { 
    __base__generateMonthYearHeader: $.datepicker._generateMonthYearHeader, 

    _generateMonthYearHeader: function (inst, 
             drawMonth, 
             drawYear, 
             minDate, 
             maxDate, 
             secondary, 
             monthNames, 
             monthNamesShort) { 
     return $.datepicker.__base__generateMonthYearHeader(
      inst, 
      drawMonth, 
      drawYear, 
      minDate, 
      maxDate, 
      secondary, 
      monthNames, 
      monthNames) 
    } 
}); 

Dies hat den Vorteil, die vollständigen Namen in der Dropdown-Anzeigen aber ermöglichen die Formatierung in der/Optionen-Einstellungen festgelegt, wenn das Eingangselement mit dem ausgewählten Datum festgelegt ist.

7

Noch schönere Lösung wäre von Ihrem Locale-Objekt zu verwenden.

// jQuery UI datepicker 
$("#datepicker").datepicker({ 
    monthNamesShort: $.datepicker.regional["en"].monthNames 
}); 
0

// jQuery UI Datepicker

Hier zeigen MM den vollständigen Namen des Monats

$("#datepicker").datepicker({ 
      changeMonth: true, 
      changeYear: true, 
      dateFormat: 'dd MM yy', 
}); 
Verwandte Themen