DatePicker dell'interfaccia utente jQuery per mostrare solo l'anno del mese


374

Sto utilizzando il selettore di date jQuery per visualizzare il calendario in tutta la mia app. Voglio sapere se posso usarlo per visualizzare il mese e l'anno (maggio 2010) e non il calendario?


16
Quindi vuoi un mese di selezione?
dotty

Stai usando jQueryUI DatePicker?
wpjmurray,

Sì. jQueryUI DatePicker
Aanu,

6
questa non è una risposta alla tua domanda, ma l'abbiamo ora, sembra molto meglio: eternicode.github.io/bootstrap-datepicker/…
Ruben,

il bootstrap-datepicker sembra un repository fuori produzione, con i problemi che si accumulano senza alcun lavoro evidente andando a risolverli ...
Kumarharsh

Risposte:


424

Ecco un trucco (aggiornato con l'intero file .html):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
    <link rel="stylesheet" type="text/css" media="screen" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/base/jquery-ui.css">
    <script type="text/javascript">
        $(function() {
            $('.date-picker').datepicker( {
            changeMonth: true,
            changeYear: true,
            showButtonPanel: true,
            dateFormat: 'MM yy',
            onClose: function(dateText, inst) { 
                $(this).datepicker('setDate', new Date(inst.selectedYear, inst.selectedMonth, 1));
            }
            });
        });
    </script>
    <style>
    .ui-datepicker-calendar {
        display: none;
    }
    </style>
</head>
<body>
    <label for="startDate">Date :</label>
    <input name="startDate" id="startDate" class="date-picker" />
</body>
</html>

EDIT jsfiddle per l'esempio sopra: http://jsfiddle.net/DBpJe/7755/

MODIFICA 2 Aggiunge il valore dell'anno del mese alla casella di input solo facendo clic sul pulsante Fine. Permette anche di eliminare i valori della casella di input, cosa impossibile nel campo sopra http://jsfiddle.net/DBpJe/5103/

EDIT 3 ha aggiornato la soluzione migliore basata sulla soluzione di rexwolf inattiva.
http://jsfiddle.net/DBpJe/5106


14
Chiamare 'setDate' riaprirà il selettore in alcuni browser. Per impedirlo, disabilita e abilita il selettore: $ (questo) .datepicker ('disabilita'); $ (questo) .datepicker ('setDate', new Date (year1, month1, 1)); $ (this) .datepicker ( 'abilitare');
Sven Sönnichsen,

1
@ Anche qui c'è un'alternativa:$(this).val($.datepicker.formatDate('MM yy', new Date(year, month, 1)));
ThiamTeck

1
Sto cercando di utilizzare questa soluzione, ma l'utilizzo di getDate su un datepicker ritorna solo oggi. Che cosa succede?
supertopi

1
Vedo che la maggior parte degli esempi utilizza stili incorporati nella pagina stessa. Questo sarebbe un problema se in qualche modo hai bisogno di più di un calendario (ognuno con impostazioni diverse, ad esempio) sulla stessa pagina. Preferisco aggiungere stili nel file .css in quanto tale: #ui-datepicker-div.noCalendar .ui-datepicker-calendar, #ui-datepicker-div.noCalendar .ui-datepicker-header a {display: none;} #ui-datepicker-div.noCalendar .ui-datepicker-header .ui-datepicker-title{width: 100%; margin: 0;} E quindi utilizzare Javascript per manipolare il comportamento:$("#ui-datepicker-div").addClass('noCalendar');
poweratom

1
Nell'esempio sopra Se desidero cancellare la casella di testo, non posso. Qualcuno può aiutarmi.
Bik,

83

Questo codice funziona perfettamente per me:

<script type="text/javascript">
$(document).ready(function()
{   
    $(".monthPicker").datepicker({
        dateFormat: 'MM yy',
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,

        onClose: function(dateText, inst) {
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $(this).val($.datepicker.formatDate('MM yy', new Date(year, month, 1)));
        }
    });

    $(".monthPicker").focus(function () {
        $(".ui-datepicker-calendar").hide();
        $("#ui-datepicker-div").position({
            my: "center top",
            at: "center bottom",
            of: $(this)
        });
    });
});
</script>

<label for="month">Month: </label>
<input type="text" id="month" name="month" class="monthPicker" />

L'output è:

inserisci qui la descrizione dell'immagine


Come si può impostare un valore per questo calendario.
Rafik malek,

62

@Ben Koehler , è perfetto ! Ho apportato una modifica minore in modo che l'utilizzo di una singola istanza del selettore data più volte funzioni come previsto. Senza questa modifica la data viene analizzata in modo errato e la data precedentemente selezionata non viene evidenziata.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
    <link rel="stylesheet" type="text/css" media="screen" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/base/jquery-ui.css">
    <script type="text/javascript">
    $(function() {
        $('.date-picker').datepicker( {
            changeMonth: true,
            changeYear: true,
            showButtonPanel: true,
            dateFormat: 'MM yy',
            onClose: function(dateText, inst) { 
                var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
                var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
                $(this).datepicker('setDate', new Date(year, month, 1));
            },
            beforeShow : function(input, inst) {
                var datestr;
                if ((datestr = $(this).val()).length > 0) {
                    year = datestr.substring(datestr.length-4, datestr.length);
                    month = jQuery.inArray(datestr.substring(0, datestr.length-5), $(this).datepicker('option', 'monthNamesShort'));
                    $(this).datepicker('option', 'defaultDate', new Date(year, month, 1));
                    $(this).datepicker('setDate', new Date(year, month, 1));
                }
            }
        });
    });
    </script>
    <style>
    .ui-datepicker-calendar {
        display: none;
        }
    </style>
</head>
<body>
    <label for="startDate">Date :</label>
    <input name="startDate" id="startDate" class="date-picker" />
</body>
</html>

Questa risposta è per lo più corretta. Tuttavia, ho dovuto cambiare MM in M ​​per ottenere il mese corretto da selezionare quando è già selezionata una data.
Chazaq,

18

Le risposte sopra sono abbastanza buone. La mia unica lamentela è che non è possibile cancellare il valore una volta impostato. Inoltre preferisco l'approccio ext-jquery-like-a-plugin.

Questo funziona perfettamente per me:

$.fn.monthYearPicker = function(options) {
    options = $.extend({
        dateFormat: "MM yy",
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        showAnim: ""
    }, options);
    function hideDaysFromCalendar() {
        var thisCalendar = $(this);
        $('.ui-datepicker-calendar').detach();
        // Also fix the click event on the Done button.
        $('.ui-datepicker-close').unbind("click").click(function() {
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            thisCalendar.datepicker('setDate', new Date(year, month, 1));
        });
    }
    $(this).datepicker(options).focus(hideDaysFromCalendar);
}

Quindi invoca in questo modo:

$('input.monthYearPicker').monthYearPicker();

2
alla fine sto effettuando il downgrade di questo perché è inattuabile, poiché gli eventi onSelect e / o onChangeMonthYear e / o onClose non si attivano o non ricevono i valori corretti o, se sovrascritti, fanno smettere di funzionare il widget
Knocte,

10
<style>
.ui-datepicker table{
    display: none;
}

<script type="text/javascript">
$(function() {
    $( "#manad" ).datepicker({
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        dateFormat: 'yy-mm',
        onClose: function(dateText, inst) { 
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $(this).datepicker('setDate', new Date(year, month, 1));
        },
        beforeShow : function(input, inst) {
            if ((datestr = $(this).val()).length > 0) {
                actDate = datestr.split('-');
                year = actDate[0];
                month = actDate[1]-1;
                $(this).datepicker('option', 'defaultDate', new Date(year, month));
                $(this).datepicker('setDate', new Date(year, month));
            }
        }
    });
});

Questo risolverà il problema =) Ma volevo il timeFormat yyyy-mm

Ho provato solo in FF4 però


"yy" in JQuery è un anno a quattro cifre. Se questo è quello che vuoi, lo hai appena raggiunto.
Paweł Dyda,


8

Ecco cosa mi è venuto in mente. Nasconde il calendario senza bisogno di un blocco di stile in più e aggiunge un pulsante Cancella per affrontare il problema di non poter cancellare il valore dopo aver fatto clic sull'input. Funziona bene anche con più mittenti nella stessa pagina.

HTML:

<input type='text' class='monthpicker'>

JavaScript:

$(".monthpicker").datepicker({
    changeMonth: true,
    changeYear: true,
    dateFormat: "yy-mm",
    showButtonPanel: true,
    currentText: "This Month",
    onChangeMonthYear: function (year, month, inst) {
        $(this).val($.datepicker.formatDate('yy-mm', new Date(year, month - 1, 1)));
    },
    onClose: function(dateText, inst) {
        var month = $(".ui-datepicker-month :selected").val();
        var year = $(".ui-datepicker-year :selected").val();
        $(this).val($.datepicker.formatDate('yy-mm', new Date(year, month, 1)));
    }
}).focus(function () {
    $(".ui-datepicker-calendar").hide();
}).after(
    $("<a href='javascript: void(0);'>clear</a>").click(function() {
        $(this).prev().val('');
    })
);

5

Avevo bisogno di un selettore Mese / Anno per due campi (Da e A) e quando uno è stato scelto il Max / Min era impostato sull'altro ... alla selezione delle date dei biglietti aerei. Avevo problemi a impostare il massimo e il minimo ... le date dell'altro campo sarebbero state cancellate. Grazie a molti dei post precedenti ... Alla fine l'ho capito. Devi impostare opzioni e date in un ordine molto specifico.

Vedi questo violino per la soluzione completa: mese / anno Picker @ JSFiddle

Codice:

var searchMinDate = "-2y";
var searchMaxDate = "-1m";
if ((new Date()).getDate() <= 5) {
    searchMaxDate = "-2m";
}
$("#txtFrom").datepicker({
    dateFormat: "M yy",
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    showAnim: "",
    minDate: searchMinDate,
    maxDate: searchMaxDate,
    showButtonPanel: true,
    beforeShow: function (input, inst) {
        if ((datestr = $("#txtFrom").val()).length > 0) {
            var year = datestr.substring(datestr.length - 4, datestr.length);
            var month = jQuery.inArray(datestr.substring(0, datestr.length - 5), "#txtFrom").datepicker('option', 'monthNamesShort'));
        $("#txtFrom").datepicker('option', 'defaultDate', new Date(year, month, 1));
                $("#txtFrom").datepicker('setDate', new Date(year, month, 1));
            }
        },
        onClose: function (input, inst) {
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $("#txtFrom").datepicker('option', 'defaultDate', new Date(year, month, 1));
            $("#txtFrom").datepicker('setDate', new Date(year, month, 1));
            var to = $("#txtTo").val();
            $("#txtTo").datepicker('option', 'minDate', new Date(year, month, 1));
            if (to.length > 0) {
                var toyear = to.substring(to.length - 4, to.length);
                var tomonth = jQuery.inArray(to.substring(0, to.length - 5), $("#txtTo").datepicker('option', 'monthNamesShort'));
                $("#txtTo").datepicker('option', 'defaultDate', new Date(toyear, tomonth, 1));
                $("#txtTo").datepicker('setDate', new Date(toyear, tomonth, 1));
            }
        }
    });
    $("#txtTo").datepicker({
        dateFormat: "M yy",
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        showAnim: "",
        minDate: searchMinDate,
        maxDate: searchMaxDate,
        showButtonPanel: true,
        beforeShow: function (input, inst) {
            if ((datestr = $("#txtTo").val()).length > 0) {
                var year = datestr.substring(datestr.length - 4, datestr.length);
                var month = jQuery.inArray(datestr.substring(0, datestr.length - 5), $("#txtTo").datepicker('option', 'monthNamesShort'));
                $("#txtTo").datepicker('option', 'defaultDate', new Date(year, month, 1));
                $("#txtTo").datepicker('setDate', new Date(year, month, 1));
            }
        },
        onClose: function (input, inst) {
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $("#txtTo").datepicker('option', 'defaultDate', new Date(year, month, 1));
            $("#txtTo").datepicker('setDate', new Date(year, month, 1));
            var from = $("#txtFrom").val();
            $("#txtFrom").datepicker('option', 'maxDate', new Date(year, month, 1));
            if (from.length > 0) {
                var fryear = from.substring(from.length - 4, from.length);
                var frmonth = jQuery.inArray(from.substring(0, from.length - 5), $("#txtFrom").datepicker('option', 'monthNamesShort'));
                $("#txtFrom").datepicker('option', 'defaultDate', new Date(fryear, frmonth, 1));
                $("#txtFrom").datepicker('setDate', new Date(fryear, frmonth, 1));
            }

        }
    });

Aggiungilo anche a un blocco di stile come menzionato sopra:

.ui-datepicker-calendar { display: none !important; }

5

Ho combinato molte delle buone risposte sopra e arrivo su questo:

    $('#payCardExpireDate').datepicker(
            {
                dateFormat: "mm/yy",
                changeMonth: true,
                changeYear: true,
                showButtonPanel: true,
                onClose: function(dateText, inst) { 
                    var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
                    var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
                    $(this).datepicker('setDate', new Date(year, month, 1)).trigger('change');
                },
                beforeShow : function(input, inst) {
                    if ((datestr = $(this).val()).length > 0) {
                        year = datestr.substring(datestr.length-4, datestr.length);
                        month = datestr.substring(0, 2);
                        $(this).datepicker('option', 'defaultDate', new Date(year, month-1, 1));
                        $(this).datepicker('setDate', new Date(year, month-1, 1));
                    }
                }
            }).focus(function () {
                $(".ui-datepicker-calendar").hide();
                $("#ui-datepicker-div").position({
                    my: "center top",
                    at: "center bottom",
                    of: $(this)
                });
            });

Questo ha dimostrato di funzionare ma di fronte a molti bug, quindi sono stato costretto a rattoppare in diversi punti di Datepicker:

if($.datepicker._get(inst, "dateFormat") === "mm/yy")
{
    $(".ui-datepicker-calendar").hide();
}

patch1: in _showDatepicker: per levigare la pelle;

patch2: in _checkOffset: per correggere il posizionamento del selettore mese (altrimenti quando il campo è nella parte inferiore del browser, il controllo offset è disattivato);

patch3: in onClose di _hideDatepicker: altrimenti quando si chiudono i campi della data lampeggiano per un periodo molto breve che è molto fastidioso.

So che la mia correzione era tutt'altro che buona, ma per ora funziona. Spero che sia d'aiuto.


Basta aggiungere questa riga a beforeShow: {inst.dpDiv.addClass ('month_year_datepicker')}. le date lampeggianti si fermeranno :). Inoltre penso che non sarà necessario
.focus

5

Aggiungi un'altra soluzione semplice

 $(function() {
    $('.monthYearPicker').datepicker({
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        dateFormat: 'M yy'
    }).focus(function() {
        var thisCalendar = $(this);
        $('.ui-datepicker-calendar').detach();
        $('.ui-datepicker-close').click(function() {
var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
thisCalendar.datepicker('setDate', new Date(year, month, 1));
        });
    });
});

http://jsfiddle.net/tmnasim/JLydp/
Caratteristiche :

  • visualizzare solo mese / anno
  • Aggiunge il valore dell'anno del mese alla casella di input solo facendo clic sul pulsante Fine
  • Nessun comportamento di "riapertura" quando fai clic su "Fine"
    ------------------------------------
    Un'altra soluzione che funziona bene per datepicker e monthpicker nella stessa pagina: (evita anche il bug del mutiple fai clic sul pulsante precedente in IE, che può verificarsi se utilizziamo la funzione focus)
    JS fiddle link

4

Sono solo io o non funziona come dovrebbe in IE (8)? La data cambia quando si fa clic su Fine, ma il datepicker si apre di nuovo, fino a quando non si fa effettivamente clic da qualche parte nella pagina per perdere il focus sul campo di input ...

Sto cercando di risolvere questo.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
    <link rel="stylesheet" type="text/css" media="screen" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/base/jquery-ui.css">
<script type="text/javascript">
$(function() {
    $('.date-picker').datepicker( {
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        dateFormat: 'MM yy',
        onClose: function(dateText, inst) { 
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $(this).datepicker('setDate', new Date(year, month, 1));
        }
    });
});
</script>
<style>
.ui-datepicker-calendar {
    display: none;
    }
</style>
</head>
<body>
    <label for="startDate">Date :</label>
    <input name="startDate" id="startDate" class="date-picker" />
</body>
</html>

1
$ (this) .datepicker ( 'disabilita'); $ (questo) .datepicker ('setDate', nuova data (anno, mese, 1)); $ (this) .datepicker ( 'abilitare'); Risolve il problema
Tom Van Schoor,

1
Questa non è una risposta
sisharp,

4

Se stai cercando un selezionatore di mesi, prova questo jquery.mtz.monthpicker

Questo ha funzionato bene per me.

options = {
    pattern: 'yyyy-mm', // Default is 'mm/yyyy' and separator char is not mandatory
    selectedYear: 2010,
    startYear: 2008,
    finalYear: 2012,
    monthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
};

$('#custom_widget').monthpicker(options);

Il link è morto. Questo sito non è raggiungibile | Impossibile trovare l'indirizzo DNS del server lucianocosta.info.
Pang


Anche il link aggiornato è interrotto.
nasch

4

Come molti altri, ho riscontrato numerosi problemi nel tentativo di farlo, e solo una combinazione delle soluzioni pubblicate, e alla fine un grande hack per renderlo perfetto, ha mi fornito una soluzione.

Problemi con altre soluzioni in questo thread che ho provato:

  1. Selezionando una nuova data in un datepicker, cambierebbe anche la data (interna) di altri datepicker, quindi quando aprivi di nuovo gli altri (o provavi a ottenere la loro data), avrebbero una data diversa da quella visualizzata nell'input assegnato -campo.
  2. Il datepicker non "ricorda" la data quando viene riaperta.
  3. Il codice per destreggiarsi tra le date utilizzava la sottostringa, quindi non era compatibile con tutti i formati.
  4. "My monthpicker" ha modificato il campo di input solo alla chiusura, anziché ogni volta che i valori sono stati modificati.
  5. Il campo di input non viene aggiornato correttamente, se si digita una stringa di input formattata in modo errato per una data e quindi si fa clic su "Chiudi" nel datepicker.
  6. Non posso avere normali datepicker, che mostrano i giorni, sulla stessa pagina dei mesi, che non mostrano i giorni.

Ho finalmente trovato il modo di risolvere tutti questi problemi . I primi quattro possono essere risolti semplicemente facendo attenzione a come si fa riferimento ai propri data e mese nel loro codice interno e, naturalmente, facendo un aggiornamento manuale dei propri selettori. Questo è visibile negli esempi di istanza nella parte inferiore. Il quinto problema può essere risolto aggiungendo del codice personalizzato alle funzioni datepicker.

NOTA: NON è necessario utilizzare i seguenti script di mesepicker per correggere i primi tre problemi nel normale datepicker. Usa semplicemente lo script di istanza di datepicker nella parte inferiore di questo post.

Ora, per usare i mestruatori e correggere l'ultimo problema, abbiamo bisogno di separare i datepicker e i monthpicker. Potremmo ottenere uno dei pochi add-on jpery-UI del mesepicker là fuori, ma alcuni mancano di flessibilità / capacità di localizzazione, altri mancano di supporto per l'animazione ... quindi, cosa fare? Crea il tuo "proprio" dal codice datepicker! Questo ti dà un mesepicker perfettamente funzionante, con tutte le funzionalità del datepicker, solo senza la visualizzazione dei giorni.

Ho fornito un js-script di Monthpicker e lo script CSS di accompagnamento , utilizzando il metodo descritto di seguito, con il codice jQuery-UI v1.11.1. Basta copiare questi frammenti di codice in due nuovi file, monthpicker.js e monthpicker.css, rispettivamente.

Se vuoi leggere il processo piuttosto semplice con cui ho convertito il datepicker in un mesepicker, scorri verso il basso fino all'ultima sezione.


Ora per aggiungere datepicker e monthpicker alla pagina!

Questi seguenti frammenti di codice javascript funzionano con più datepicker e / o monthpicker sulla pagina, senza i problemi di cui sopra! Risolto generalmente usando '$ (questo).' Un sacco :)

Il primo script è per un normale datepicker e il secondo è per i "nuovi" monthpicker.

Il .after fuori commento , che consente di creare qualche elemento per cancellare il campo di input, viene rubato dalla risposta di Paul Richards.

Sto usando il formato "MM yy" nel mio monthpicker e il formato "yy-mm-dd" nel mio datepicker, ma questo è completamente compatibile con tutti i formati , quindi sei libero di usare quello che vuoi. Cambia semplicemente l'opzione 'dateFormat'. Le opzioni standard 'showButtonPanel', 'showAnim' e 'yearRange' sono ovviamente opzionali e personalizzabili secondo i tuoi desideri.


Aggiunta di un datepicker

Istanza di Datepicker. Questo risale a 90 anni fa e ai giorni nostri. Ti aiuta a mantenere corretto il campo di input, specialmente se imposti le opzioni defaultDate, minDate e maxDate, ma può gestirlo in caso contrario. Funzionerà con qualsiasi data Formatta che scegli.

        $('#MyDateTextBox').datepicker({
            dateFormat: 'yy-mm-dd',
            changeMonth: true,
            changeYear: true,
            showButtonPanel: true,
            showMonthAfterYear: true,
            showWeek: true,
            showAnim: "drop",
            constrainInput: true,
            yearRange: "-90:",
            minDate: new Date((new Date().getFullYear() - 90), new Date().getMonth(), new Date().getDate()),
            maxDate: new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()),
            defaultDate: new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()),

            onClose: function (dateText, inst) {
                // When onClose is called after we have clicked a day (and not clicked 'Close' or outside the datepicker), the input-field is automatically
                // updated with a valid date-string. They will always pass, because minDate and maxDate are already enforced by the datepicker UI.
                // This try is to catch and handle the situations, where you open the datepicker, and manually type in an invalid date in the field,
                // and then close the datepicker by clicking outside the datepicker, or click 'Close', in which case no validation takes place.
                try {
                    // If datepicker can parse the date using our formatstring, the instance will automatically parse
                    // and apply it for us (after the onClose is done).
                    // If the input-string is invalid, 'parseDate' will throw an exception, and go to our catch.
                    // If the input-string is EMPTY, then 'parseDate' will NOT throw an exception, but simply return null!
                    var typedDate = $.datepicker.parseDate($(this).datepicker('option', 'dateFormat'), $(this).val());

                    // typedDate will be null if the entered string is empty. Throwing an exception will force the datepicker to
                    // reset to the last set default date.
                    // You may want to just leave the input-field empty, in which case you should replace 'throw "No date selected";' with 'return;'
                    if (typedDate == null)throw "No date selected";

                    // We do a manual check to see if the date is within minDate and maxDate, if they are defined.
                    // If all goes well, the default date is set to the new date, and datepicker will apply the date for us.
                    var minDate = $(this).datepicker("option", "minDate");
                    var maxDate = $(this).datepicker("option", "maxDate");
                    if (minDate !== null && typedDate < minDate) throw "Date is lower than minDate!";
                    if (maxDate !== null && typedDate > maxDate) throw "Date is higher than maxDate!";

                    // We update the default date, because the date seems valid.
                    // We do not need to manually update the input-field, as datepicker has already done this automatically.
                    $(this).datepicker('option', 'defaultDate', typedDate);
                }
                catch (err) {
                    console.log("onClose: " + err);
                    // Standard behavior is that datepicker does nothing to fix the value of the input field, until you choose
                    // a new valid date, by clicking on a day.
                    // Instead, we set the current date, as well as the value of the input-field, to the last selected (and
                    // accepted/validated) date from the datepicker, by getting its default date. This only works, because
                    // we manually change the default date of the datepicker whenever a new date is selected, in both 'beforeShow'
                    // and 'onClose'.
                    var date = $(this).datepicker('option', 'defaultDate');
                    $(this).val($.datepicker.formatDate($(this).datepicker('option', 'dateFormat'), date));
                    $(this).datepicker('setDate', date);
                }
            },

            beforeShow: function (input, inst) {
                // beforeShow is particularly irritating when initializing the input-field with a date-string.
                // The date-string will be parsed, and used to set the currently selected date in the datepicker.
                // BUT, if it is outside the scope of the minDate and maxDate, the text in the input-field is not
                // automatically updated, only the internal selected date, until you choose a new date (or, because
                // of our onClose function, whenever you click close or click outside the datepicker).
                // We want the input-field to always show the date that is currently chosen in our datepicker,
                // so we do some checks to see if it needs updating. This may not catch ALL cases, but these are
                // the primary ones: invalid date-format; date is too early; date is too late.
                try {
                    // If datepicker can parse the date using our formatstring, the instance will automatically parse
                    // and apply it for us (after the onClose is done).
                    // If the input-string is invalid, 'parseDate' will throw an exception, and go to our catch.
                    // If the input-string is EMPTY, then 'parseDate' will NOT throw an exception, but simply return null!
                    var typedDate = $.datepicker.parseDate($(this).datepicker('option', 'dateFormat'), $(this).val());

                    // typedDate will be null if the entered string is empty. Throwing an exception will force the datepicker to
                    // reset to the last set default date.
                    // You may want to just leave the input-field empty, in which case you should replace 'throw "No date selected";' with 'return;'
                    if (typedDate == null)throw "No date selected";

                    // We do a manual check to see if the date is within minDate and maxDate, if they are defined.
                    // If all goes well, the default date is set to the new date, and datepicker will apply the date for us.
                    var minDate = $(this).datepicker("option", "minDate");
                    var maxDate = $(this).datepicker("option", "maxDate");
                    if (minDate !== null && typedDate < minDate) throw "Date is lower than minDate!";
                    if (maxDate !== null && typedDate > maxDate) throw "Date is higher than maxDate!";

                    // We update the input-field, and the default date, because the date seems valid.
                    // We also manually update the input-field, as datepicker does not automatically do this when opened.
                    $(this).val($.datepicker.formatDate($(this).datepicker('option', 'dateFormat'), typedDate));
                    $(this).datepicker('option', 'defaultDate', typedDate);
                }
                catch (err) {
                    // Standard behavior is that datepicker does nothing to fix the value of the input field, until you choose
                    // a new valid date, by clicking on a day.
                    // We want the same behavior when opening the datepicker, so we set the current date, as well as the value
                    // of the input-field, to the last selected (and accepted/validated) date from the datepicker, by getting
                    // its default date. This only works, because we manually change the default date of the datepicker whenever
                    // a new date is selected, in both 'beforeShow' and 'onClose', AND have a default date set in the datepicker options.
                    var date = $(this).datepicker('option', 'defaultDate');
                    $(this).val($.datepicker.formatDate($(this).datepicker('option', 'dateFormat'), date));
                    $(this).datepicker('setDate', date);
                }
            }
        })
    //.after( // this makes a link labeled "clear" appear to the right of the input-field, which clears the text in it
    //    $("<a href='javascript: void(0);'>clear</a>").click(function() {
    //        $(this).prev().val('');
    //    })
    //)
    ;

Aggiunta di un mesepicker

Includere il file monthpicker.js e il file monthpicker.css nella pagina in cui si desidera utilizzare monthpickers.

Istantanea di Monthpicker Il valore recuperato da questo monthpicker è sempre il PRIMO giorno del mese selezionato. Inizia il mese corrente e va da 100 anni fa e 10 anni nel futuro.

    $('#MyMonthTextBox').monthpicker({
        dateFormat: 'MM yy',
        changeMonth: true,
        changeYear: true,
        showMonthAfterYear: true,
        showAnim: "drop",
        constrainInput: true,
        yearRange: "-100Y:+10Y",
        minDate: new Date(new Date().getFullYear() - 100, new Date().getMonth(), 1),
        maxDate: new Date((new Date().getFullYear() + 10), new Date().getMonth(), 1),
        defaultDate: new Date(new Date().getFullYear(), new Date().getMonth(), 1),

        // Monthpicker functions
        onClose: function (dateText, inst) {
            var date = new Date(inst.selectedYear, inst.selectedMonth, 1);
            $(this).monthpicker('option', 'defaultDate', date);
            $(this).monthpicker('setDate', date);
        },

        beforeShow: function (input, inst) {
            if ($(this).monthpicker("getDate") !== null) {
                // Making sure that the date set is the first of the month.
                if($(this).monthpicker("getDate").getDate() !== 1){
                    var date = new Date(inst.selectedYear, inst.selectedMonth, 1);
                    $(this).monthpicker('option', 'defaultDate', date);
                    $(this).monthpicker('setDate', date);
                }
            } else {
                // If the date is null, we reset it to the defaultDate. Make sure that the defaultDate is always set to the first of the month!
                $(this).monthpicker('setDate', $(this).monthpicker('option', 'defaultDate'));
            }
        },
        // Special monthpicker function!
        onChangeMonthYear: function (year, month, inst) {
            $(this).val($.monthpicker.formatDate($(this).monthpicker('option', 'dateFormat'), new Date(year, month - 1, 1)));
        }
    })
    //.after( // this makes a link labeled "clear" appear to the right of the input-field, which clears the text in it
    //    $("<a href='javascript: void(0);'>clear</a>").click(function() {
    //        $(this).prev().val('');
    //    })
    //)
    ;

Questo è tutto! Questo è tutto ciò di cui hai bisogno per creare un mesepicker.

Non riesco a far funzionare un jsfiddle con questo, ma funziona per me nel mio progetto ASP.NET MVC. Fai semplicemente quello che fai normalmente per aggiungere un datepicker alla tua pagina e incorpora gli script sopra, possibilmente cambiando il selettore (che significa $ ("# MyMonthTextBox")) in qualcosa che funzioni per te.

Spero che questo aiuti qualcuno.

Collegamenti a pastebins per alcune configurazioni extra di date e mese:

  1. Monthpicker lavora l'ultimo giorno del mese . La data che riceverai da questo mesepicker sarà sempre l'ultimo giorno del mese.

  2. Due collaboratori di mese che collaborano ; 'start' sta lavorando il primo del mese e 'end' sta lavorando l'ultimo del mese. Entrambi sono limitati l'uno dall'altro, quindi scegliendo un mese su "fine" che è prima del mese selezionato su "inizio", cambierà "inizio" in modo che sia lo stesso mese di "fine". E viceversa. FACOLTATIVO: quando si seleziona un mese su "inizio", la "data minima" su "fine" viene impostata su quel mese. Per rimuovere questa funzione, commenta una riga in onClose (leggi i commenti).

  3. Due datepicker collaboranti ; Entrambi sono limitati l'uno dall'altro, quindi scegliendo una data su "fine" che è precedente alla data selezionata su "inizio", cambierà "inizio" in modo che sia lo stesso mese di "fine". E viceversa. FACOLTATIVO: quando si seleziona una data su "inizio", la "data minima" su "fine" viene impostata su quella data. Per rimuovere questa funzione, commenta una riga in onClose (leggi i commenti).


Come ho cambiato DatePicker in MonthPicker

Ho preso tutto il codice javascript da jquery-ui-1.11.1.js relativo al loro datepicker, incollato in un nuovo file js e sostituito le seguenti stringhe:

  • "datepicker" ==> "monthpicker"
  • "Datepicker" ==> "Monthpicker"
  • "selezione data" ==> "selezione mese"
  • "Selezione data" ==> "Selezione mese"

Quindi ho rimosso la parte del for-loop che crea l'intero div ui-datepicker-calendar (il div che altre soluzioni nascondono usando i CSS). Questo può essere trovato in _generateHTML: function (inst).

Trova la riga che dice:

"</div><table class='ui-datepicker-calendar'><thead>" +

Contrassegna tutto da dopo il div-tag di chiusura e fino a (e non incluso) la linea dove dice:

drawMonth++;

Ora sarà infelice perché dobbiamo chiudere alcune cose. Dopo aver chiuso il div-tag di prima, aggiungi questo:

";

Il codice ora dovrebbe essere unito bene insieme. Ecco uno snippet di codice che mostra cosa avresti dovuto finire:

...other code...

calender += "<div class='ui-monthpicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
                (/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
                (/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
                this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
                    row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
                "</div>";
            drawMonth++;
            if (drawMonth > 11) {
                drawMonth = 0;
                drawYear++;
            }

...other code...

Quindi ho copiato / incollato il codice da jquery-ui.css relativo ai datepicker in un nuovo file CSS e ho sostituito le seguenti stringhe:

  • "datepicker" ==> "monthpicker"

3

dopo aver scavato jQueryUI.com per datepicker, ecco la mia conclusione e la risposta alla tua domanda.

Innanzitutto, direi di no alla tua domanda. Non è possibile utilizzare datepicker jQueryUI solo per selezionare mese e anno. Non è supportato Non ha alcuna funzione di callback per questo.

Ma puoi hackerarlo per visualizzare solo mese e anno usando css per nascondere i giorni, ecc. E penso che non abbia ancora senso perché hai bisogno delle date da cliccare per scegliere una data.

Posso dire che devi solo usare un altro datepicker. Come quello che Roger ha suggerito.


3

Ho avuto il problema della selezione della data mescolata con la selezione del mese. L'ho risolto così.

    $('.monthpicker').focus(function()
    {
    $(".ui-datepicker-calendar").show();
    }).datepicker( {
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        dateFormat: 'MM/yy',
        create: function (input, inst) { 

         },
        onClose: function(dateText, inst) { 
            var month = 1+parseInt($("#ui-datepicker-div .ui-datepicker-month :selected").val());           
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();

        }
    });

3

Se qualcuno lo desidera anche per più calendari, non è molto difficile aggiungere questa funzionalità a jquery ui. con ricerca minimizzata per:

x+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&C==0?c?f:n:"")+(

aggiungi questo davanti a x

var accl = ''; if(this._get(a,"justMonth")) {accl = ' ui-datepicker-just_month';}

Cercare

<table class="ui-datepicker-calendar

e sostituirlo con

<table class="ui-datepicker-calendar'+accl+'

anche cercare

this._defaults={

sostituirlo con

this._defaults={justMonth:false,

per css dovresti usare:

.ui-datepicker table.ui-datepicker-just_month{
    display: none;
}

dopo che tutto è fatto basta andare alle funzioni init datepicker desiderate e fornire le impostazioni var

$('#txt_month_chart_view').datepicker({
    changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        dateFormat: 'MM yy',
        justMonth: true,
        create: function(input, inst) {
            $(".ui-datepicker table").addClass("badbad");
        },
        onClose: function(dateText, inst) {
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $(this).datepicker('setDate', new Date(year, month, 1));
        }
});

justMonth: true è la chiave qui :)



2

Ho apportato alcuni perfezionamenti alla risposta quasi perfetta di BrianS sopra:

  1. Ho riproposto il valore impostato in mostra perché penso che in realtà lo renda leggermente più leggibile in questo caso (anche se nota che sto usando un formato leggermente diverso)

  2. Il mio cliente non voleva un calendario, quindi ho aggiunto un'aggiunta alla classe show / hide per farlo senza influenzare altri datepicker. La rimozione della classe è su un timer per evitare che il tavolo lampeggi di nuovo mentre il datepicker svanisce, il che sembra essere molto evidente in IE.

EDIT: un problema rimasto da risolvere con questo è che non c'è modo di svuotare il datepicker: cancellare il campo e fare clic e si ripopola con la data selezionata.

EDIT2: non sono riuscito a risolverlo bene (cioè senza aggiungere un pulsante Clear separato accanto all'input), quindi ho finito per usarlo: https://github.com/thebrowser/jquery.ui.monthpicker - se qualcuno può ottenere l'interfaccia utente standard per farlo sarebbe sorprendente.

    $('.typeof__monthpicker').datepicker({
        dateFormat: 'mm/yy',
        showButtonPanel:true,
        beforeShow: 
            function(input, dpicker)
            {                           
                if(/^(\d\d)\/(\d\d\d\d)$/.exec($(this).val()))
                {
                    var d = new Date(RegExp.$2, parseInt(RegExp.$1, 10) - 1, 1);

                    $(this).datepicker('option', 'defaultDate', d);
                    $(this).datepicker('setDate', d);
                }

                $('#ui-datepicker-div').addClass('month_only');
            },
        onClose: 
            function(dt, dpicker)
            {
                setTimeout(function() { $('#ui-datepicker-div').removeClass('month_only') }, 250);

                var m = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
                var y = $("#ui-datepicker-div .ui-datepicker-year :selected").val();

                $(this).datepicker('setDate', new Date(y, m, 1));
            }
    });

È inoltre necessaria questa regola di stile:

#ui-datepicker-div.month_only .ui-datepicker-calendar {
display:none
}

2

Mi è piaciuta la risposta di @ user1857829 e il suo approccio "ext-jquery-like-a-plugin". Ho appena fatto una modifica di litte in modo che quando cambi mese o anno in qualche modo il selettore scriva effettivamente la data nel campo. Ho scoperto che mi piacerebbe quel comportamento dopo averlo usato un po '.

jQuery.fn.monthYearPicker = function(options) {
  options = $.extend({
    dateFormat: "mm/yy",
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    showAnim: "",
    onChangeMonthYear: writeSelectedDate
  }, options);
  function writeSelectedDate(year, month, inst ){
   var thisFormat = jQuery(this).datepicker("option", "dateFormat");
   var d = jQuery.datepicker.formatDate(thisFormat, new Date(year, month-1, 1));
   inst.input.val(d);
  }
  function hideDaysFromCalendar() {
    var thisCalendar = $(this);
    jQuery('.ui-datepicker-calendar').detach();
    // Also fix the click event on the Done button.
    jQuery('.ui-datepicker-close').unbind("click").click(function() {
      var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
      var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
      thisCalendar.datepicker('setDate', new Date(year, month, 1));
      thisCalendar.datepicker("hide");
    });
  }
  jQuery(this).datepicker(options).focus(hideDaysFromCalendar);
}

2

Ho avuto alcune difficoltà con la risposta accettata e nessun altro poteva essere usato con un minimo sforzo come base. Così, ho deciso di modificare l'ultima versione della risposta accettata fino a quando non soddisfi almeno gli standard minimi di codifica / riusabilità di JS.

Ecco una soluzione molto più pulita della terza (ultima) edizione di risposta accettata da Ben Koehler . Inoltre, sarà:

  • lavorare non solo con mm/yy formato, ma con qualsiasi altro, inclusi gli OP MM yy.
  • non nascondere il calendario di altri datepicker sulla pagina.
  • Non implicitamente inquinare l'oggetto globale JS con il datestr, month, yearecc variabili.

Controlla:

$('.date-picker').datepicker({
    dateFormat: 'MM yy',
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    onClose: function (dateText, inst) {
        var isDonePressed = inst.dpDiv.find('.ui-datepicker-close').hasClass('ui-state-hover');
        if (!isDonePressed)
            return;

        var month = inst.dpDiv.find('.ui-datepicker-month').find(':selected').val(),
            year = inst.dpDiv.find('.ui-datepicker-year').find(':selected').val();

        $(this).datepicker('setDate', new Date(year, month, 1)).change();
        $('.date-picker').focusout();
    },
    beforeShow: function (input, inst) {
        var $this = $(this),
            // For the simplicity we suppose the dateFormat will be always without the day part, so we
            // manually add it since the $.datepicker.parseDate will throw if the date string doesn't contain the day part
            dateFormat = 'd ' + $this.datepicker('option', 'dateFormat'),
            date;

        try {
            date = $.datepicker.parseDate(dateFormat, '1 ' + $this.val());
        } catch (ex) {
            return;
        }

        $this.datepicker('option', 'defaultDate', date);
        $this.datepicker('setDate', date);

        inst.dpDiv.addClass('datepicker-month-year');
    }
});

E tutto il necessario è il seguente CSS da qualche parte in giro:

.datepicker-month-year .ui-datepicker-calendar {
    display: none;
}

Questo è tutto. Spero che quanto sopra farà risparmiare un po 'di tempo per ulteriori lettori.


1
Proprio e FYI. La riga 'inst.dpDiv.addClass (' datepicker-month-year ');' aggiungerà l'intero mese-mese al div del calendario di datepicker, il che significa che se ci sono altri campi data con datepicker, smetteranno di funzionare a causa di ciò. Poiché esiste un solo div per il calendario, sarebbe interessante aggiungere un '$ ('. Datepicker-mese-anno '). RemoveClass (' datepicker-mese-anno ');' utilizzando beforeShow su altri datepicker che richiedono il calendario tradizionale. OPPURE, rimuovi la classe quando perdi la concentrazione. Ma non riuscivo a trovare nulla di
simile a questo nell'API

1
Questa è la risposta completa che tutti dovrebbero usare. Il problema più grande risolto per me è stato il popup di inserimento della data predefinito per impostazione predefinita al mese e all'anno correnti, indipendentemente da ciò che è già presente. Questa risposta l'ha risolto.
Alex F,

1

So che è una risposta un po 'in ritardo, ma ho avuto lo stesso problema un paio di giorni prima e sono arrivato con una soluzione piacevole e fluida. Per prima cosa ho trovato questo fantastico selettore di date qui

Quindi ho appena aggiornato la classe CSS (jquery.calendarPicker.css) che viene fornita con l'esempio in questo modo:

.calMonth {
  /*border-bottom: 1px dashed #666;
  padding-bottom: 5px;
  margin-bottom: 5px;*/
}

.calDay 
{
    display:none;
}

Il plugin genera un evento DateChanged quando si cambia qualcosa, quindi non importa che non si stia facendo clic su un giorno (e si adatta bene come selettore di anno e mese)

Spero che sia d'aiuto!



1

Ho provato le varie soluzioni fornite qui e hanno funzionato bene se volevi semplicemente un paio di menu a discesa.

Il miglior 'picker' (in apparenza ecc.) ( Https://github.com/thebrowser/jquery.ui.monthpicker ) suggerito qui è fondamentalmente una copia di una vecchia versione di datepicker jquery-ui con il _generateHTML riscritto. Tuttavia, ho scoperto che non funziona più bene con l'attuale jquery-ui (1.10.2) e ho avuto altri problemi (non si chiude su esc, non si chiude all'apertura di altri widget, ha stili hardcoded).

Piuttosto che tentare di correggere quel mesepicker e piuttosto di riprovare lo stesso processo con l'ultimo datepicker, sono andato con l'aggancio alle parti pertinenti del selettore di date esistente.

Ciò comporta l'override:

  • _generateHTML (per creare il markup del selettore mese)
  • parseDate (poiché non gli piace quando non c'è un componente del giorno),
  • _selectDay (poiché datepicker utilizza .html () per ottenere il valore del giorno)

Poiché questa domanda è un po 'vecchia e ha già una buona risposta, ecco solo l'override di _selectDay per mostrare come è stato fatto:

jQuery.datepicker._base_parseDate = jQuery.datepicker._base_parseDate || jQuery.datepicker.parseDate;
jQuery.datepicker.parseDate = function (format, value, settings) {
    if (format != "M y") return jQuery.datepicker._hvnbase_parseDate(format, value, settings);
    // "M y" on parse gives error as doesn't have a day value, so 'hack' it by simply adding a day component
    return jQuery.datepicker._hvnbase_parseDate("d " + format, "1 " + value, settings);
};

Come detto, questa è una vecchia domanda, ma l'ho trovato utile, quindi volevo aggiungere un feedback con una soluzione alternativa.


0

per un mese, usando JQuery v 1.7.2, ho il seguente javascript che sta facendo proprio questo

$l("[id$=txtDtPicker]").monthpicker({
showOn: "both",
buttonImage: "../../images/Calendar.png",
buttonImageOnly: true,
pattern: 'yyyymm', // Default is 'mm/yyyy' and separator char is not mandatory
monthNames: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez']
});


0

Grazie per la soluzione di Ben Koehler.

Tuttavia, ho avuto un problema con più istanze di datepicker, alcune delle quali necessarie con la selezione del giorno. La soluzione di Ben Koehler (nella modifica 3) funziona, ma nasconde la selezione del giorno in tutti i casi. Ecco un aggiornamento che risolve questo problema:

$('.date-picker').datepicker({
    dateFormat: "mm/yy",
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    onClose: function(dateText, inst) {
        if($('#ui-datepicker-div').html().indexOf('ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all ui-state-hover') > -1) {
            $(this).datepicker(
                'setDate',
                new Date(
                    $("#ui-datepicker-div .ui-datepicker-year :selected").val(),
                    $("#ui-datepicker-div .ui-datepicker-month :selected").val(),
                    1
                )
            ).trigger('change');
            $('.date-picker').focusout();
        }
        $("#ui-datepicker-div").removeClass("month_year_datepicker");
    },
    beforeShow : function(input, inst) {
        if((datestr = $(this).val()).length > 0) {
            year = datestr.substring(datestr.length-4, datestr.length);
            month = datestr.substring(0, 2);
            $(this).datepicker('option', 'defaultDate', new Date(year, month-1, 1));
            $(this).datepicker('setDate', new Date(year, month-1, 1));
            $("#ui-datepicker-div").addClass("month_year_datepicker");
        }
    }
});

-2

Utilizzare onSelectrichiamare e rimuovere manualmente la parte dell'anno e impostare manualmente il testo nel campo


3
Penso che non stai leggendo la domanda. Aanu vuole "visualizzare il mese e l'anno (maggio 2010) e non il calendario".
Reigel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.