2012-12-13 2 views
5

Mi fa davvero impazzire il fatto che jQuery datepicker abbia una casella di selezione per cambiare il mese ma non mostra il nome completo del mese (ma lo fa negli altri mesi).jQuery Datepicker - Mostra i nomi completi del mese nella casella di selezione

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

Esiste un modo per personalizzare il DatePicker per visualizzare il nome completo del mese senza modificare il codice sorgente?

+0

Sai, la sua davvero difficile eseguire il debug di una foto ... –

+0

Lei non è necessario eseguire il debug di tutto. Ti sto chiedendo come personalizzare il Datepicker dell'interfaccia utente jQuery. – BadHorsie

+0

Ok, non sapevo che fosse un'opzione originale in datepicker, stavo pensando che fosse uno personalizzato, così spiacente –

risposta

9

Forse un un po 'in ritardo ma stavo avendo lo stesso problema in questo momento ed è stato risolto abbastanza facilmente. Prima di chiamare la funzione DatePicker ottenere monthNames, li metti in una nuova variabile e cambia shortnames invitando tale variabile:

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

Se qualcuno incontra questo per funzionare al giorno d'oggi dovresti cambiare '$ .datepicker.regional ['nl']. monthNames' a' $ .datepicker._defaults.monthNames' –

1

Non trovare il modo migliore di aggiornamento dell'interfaccia utente datepicker, ma che ti dà l'idea:

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

Grazie, questo funziona eccetto che non è del tutto corretto. I mesi sono sbagliati se il menu di selezione non contiene 12 mesi. Ad esempio, se il mese corrente è dicembre, solo dicembre verrà visualizzato nel menu di selezione, ma verrà chiamato "gennaio", in base al tuo script. Per risolvere, '$ (this) .text (months [i]);' deve essere '$ (this) .text (months [$ (this) .attr ('value')]);' – BadHorsie

0

è possibile definire attributo "monthNamesShort" come:

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

È possibile estendere la funzione incriminata DatePicker e "override", passando nel lungo nomi.

$.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) 
    } 
}); 

Questo ha il vantaggio di visualizzare i nomi completi nel menu a discesa, ma che consente la formattazione specificato nelle impostazioni/opzioni quando l'elemento di input è impostato con la data selezionata.

7

Soluzione ancora migliore sarebbe utilizzare monthNames dall'oggetto locale.

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

// jQuery UI datepicker

Qui MM mostrano il nome completo del mese

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