2012-08-26 17 views
11

Mam dwie dropdownlist które posiadają miesiące i lata ...Pobiera aktualny miesiąc i dzień przy użyciu 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()); 
}); 

Napisałem skrypt JQuery jak wyżej, tak że kiedy mój program działa wartość rozwijana wybrany musi być obecny miesiąc i rok ..

ale kiedy wykonuję program .. alert daje 7 i 2012 .. ale moim zdaniem wybrany jest bieżący miesiąc, ale rok bieżący nie jest, dlaczego? i jak mogę zrobić moje rozwijanie, aby wybrać bieżący rok?

+1

Podaj więcej kodu i opublikuj demo na jsfiddle.net –

Odpowiedz

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

Dziękuję bardzo ... pracował .. –

2

Miesięcy są zwracane jako liczbę całkowitą od 0 (styczeń) do 11 (grudzień): patrz http://www.java2s.com/Tutorial/JavaScript/0240__Date/DategetMonth.htm

Więc bieżący miesiąc (sierpień) zwróci 7. Aby móc dopasować się ze zwykłymi indeks miesiąca (czyli od 1 do 12), użyj ((new Date()).getMonth() + 1).

Jak podkreślono w komentarzach, źle zrozumiałem problem. Miesiąc jest poprawny z powodu tablicy opartej na zera na miesiące i selektora jquery :eq() również opartego na zera.

Jednak jak wskazano w innych odpowiedziach, zwracany rok nie pasuje do :eq(), który pasuje do n-tego elementu w selektorze jquery. Korzystanie z sugerowanej wersji byłoby lepsze.

+0

OP ma problemy z bieżącym rokiem: "moim zdaniem wybrany jest bieżący miesiąc, ale obecny rok nie jest powodem?" – nemesv

+0

Nie miałem na myśli, że na mojej liście rozwijanej pokazuje się sierpień, ale chcę pokazać rok 2012 na mojej drugiej rozwijanej liście ... ponieważ pokazuje minimalną wartość, tj. 2007 .. –

+0

@nemesv: chcę zapytać o to samo pytanie?? –

1

:eq(N) część selektora jQuery wybiera N-tego elementu (w tym 0th), w odpowiadającej mu s et (który w tym momencie byłby #Years option). Więc jeśli nie masz więcej niż opcji 2012 w liście rozwijanej Years, to nie zadziała.

Lepiej wybrać opcję opartą na jego wartość: option[value=2012] lub

just use $("#Years").val(2012), to bardziej czytelne i mniej kodu.

+0

ale moja wiadomość ostrzegająca pokazuje 2012 .. –

+0

@ sna2stha: I? Twój alert pokazuje tylko bieżący rok, a nie wybraną opcję. – lqc

Powiązane problemy