2012-08-26 22 views
11

ho due DropDownList che detengono mesi e anni ...Ottenere mese e la data corrente utilizzando jQuery

$(document).ready(function() {    
    $('#Months option:eq(' + (new Date).getMonth() + ')').prop('selected', true); 
     alert((new Date).getMonth());   
    $('#Years option:eq(' + (new Date).getFullYear() + ')').prop('selected', true); 
     alert((new Date).getFullYear()); 
}); 

Ho scritto la sceneggiatura JQuery come sopra in modo che quando il mio programma viene eseguito il valore discesa selezionato deve essere la corrente mese e anno ..

ma quando eseguo il programma .. l'avviso dà 7 e il 2012 .. ma a mio avviso il mese corrente è selezionata, ma l'anno in corso non perché è ?? e come posso rendere il mio menu a discesa per selezionare l'anno corrente ??

+1

dare un po 'di codice e pubblicare una demo su jsfiddle.net –

risposta

17

jQuery

var d = new Date(), 

    n = d.getMonth(), 

    y = d.getFullYear(); 

$('#months option:eq('+n+')').prop('selected', true); 

$('#years option[value="'+y+'"]').prop('selected', true); 

HTML

​<select id="months"> 
    <option value="1">January</option> 
    <option value="2">February</option> 
    <option value="3">March</option> 
    <option value="4">April</option> 
    <option value="5">May</option> 
    <option value="6">June</option> 
    <option value="7">July</option> 
    <option value="8">August</option> 
    <option value="9">September</option> 
    <option value="10">October</option> 
    <option value="11">November</option> 
    <option value="12">December</option> 
</select> 
<select id="years"> 
    <option value="2011">2011</option> 
    <option value="2012">2012</option> 
    <option value="2013">2013</option> 
</select> 

DEMO

+0

Grazie mille ... ha funzionato .. –

2

Mesi vengono restituiti come un intero da 0 (gennaio) a 11 (dicembre): vedi http://www.java2s.com/Tutorial/JavaScript/0240__Date/DategetMonth.htm

Così il mese in corso (agosto) sarebbe tornato 7. Per essere in grado di abbinare con il solito indice del mese (da 1 a 12), utilizzare ((new Date()).getMonth() + 1).

Come indicato nei commenti, ho frainteso il problema. Il mese è corretto a causa dell'array basato su zero per mesi e il selettore jquery :eq() è anch'esso a base zero.

Tuttavia, come indicato in altre risposte, l'anno restituito non corrisponde a :eq() che corrisponde all'ennesimo elemento nel selettore jquery. Utilizzare come suggerito option[value=' + (new Date).getFullYear() + ')' sarebbe meglio.

+0

OP ha problemi con l'anno in corso: "a mio avviso il mese corrente è selezionato ma l'anno in corso non è il motivo ??" – nemesv

+0

non volevo dire che nel mio elenco a discesa mostra agosto ma voglio mostrare 2012 nel mio secondo elenco a discesa ... in quanto sta mostrando il valore minimo cioè 2007 .. –

+0

@nemesv: voglio chiedere lo stesso domanda?? –

1

La :eq(N) parte del selettore in jQuery seleziona elemento Nth (compresa 0th) nel corrispondente s et (che a quel punto sarebbe #Years option). Quindi, a meno che tu non abbia più opzioni del 2012 nel menu a discesa Years, questo non funzionerà.

E 'meglio selezionare l'opzione in base al suo valore: option[value=2012] o

just use $("#Years").val(2012), è più leggibile e meno codice.

+0

ma il mio messaggio di avviso mostra 2012 .. –

+0

@ sna2stha: E? Il tuo avviso mostra solo l'anno corrente, non quale opzione è stata selezionata. – lqc

Problemi correlati