2014-04-15 18 views
9

Próbuję ustawić domyślną datę dla Datepicker Jquery na init. Tu jest mój HTML:Datepicker set default date

var content = ""; 
      content = "<table class=\"filter-table\">"; 
      content += "<tr><td><label for='startDate'>From </label></td><td><input name='startDate' id='startDate' class='date-picker' /></td></tr>"; 
      content += "<tr><td>&nbsp;</td></tr>"; 
      content += "<tr><td><label for='endDate'>To </label></td><td><input name='endDate' id='endDate' class='date-picker' /></td></tr>";    

A moja JavaScript:

<script type="text/javascript"> 
    function showdatepicker() { 
     $('.date-picker').datepicker({ 
      changeMonth: true, 
      changeYear: true, 
      changeDay: true, 
      showButtonPanel: true, 
      dateFormat: 'yy-mm-dd', 
      onClose: function(dateText, inst) { 
       var day = $("#ui-datepicker-div .ui-datepicker-day :selected").val(); 
       var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val(); 
       var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val(); 
        $('#startDate').datepicker({defaultDate: -30}); 
       $('#endDate').datepicker({defaultDate: new Date()}); 
      } 
     }); 
    }  
    </script> 

Co staram się zrobić, to ustawić datę i show w polu tekstowym Gdy na załadować stronę. Data końcowa powinna być bieżącą datą, a data rozpoczęcia powinna wynosić jeden miesiąc wcześniej. Jednak za pomocą tych kodów nie wyświetla daty w polu tekstowym przy pierwszym załadowaniu.

Zastanawiam się, dlaczego tak się dzieje. Z góry dziękuję.

Odpowiedz

6

ja, jak ty, nie może stosować metodę na datepicker do wypełnienia datę domyślną w wejściu.

Zamiast tego stworzyłem kod przy pomocy waniliowego JS, aby obliczyć domyślne daty i sformatować je w polu tekstowym.

Oto JS I dodaje:

function showdatepicker() { 
    // same as yours 
} 

function populateDefaultValues() { 
    var today = new Date(); 
    var month = today.getMonth() - 1, 
     year = today.getFullYear(); 
    if (month < 0) { 
     month = 11; 
     year -= 1; 
    } 
    var oneMonthAgo = new Date(year, month, today.getDate()); 

    $('#startDate').val($.datepicker.formatDate('yy-mm-dd', today)); 
    $('#endDate').val($.datepicker.formatDate('yy-mm-dd', oneMonthAgo)); 
} 

$(function() { 
    populateDefaultValues(); 
    showdatepicker(); 
}); 

jsFiddle

+0

Działa, dzięki. Więc zasadniczo muszę wykonać dwie różne funkcje dla dwóch różnych celów? –

+1

Cóż, możesz go zmodyfi- kować, aby zachować rzeczy [DRY] (http://en.wikipedia.org/wiki/Don't_repeat_yourself). Przydatna może być także lepsza biblioteka do zarządzania datami, np. [MomentJS] (http://momentjs.com), dzięki której łatwiej jest budować daty, biorąc pod uwagę wszystko jak lata przestępne, dni w miesiącu, itp. Moja metoda nie całkiem to zrobiła, teraz rozumiem. – GregL

+1

Jeśli po prostu uruchamiasz ten kod po wczytaniu strony, umieść go wewnątrz bloku '$ (function() {') – Wireblue

1

Spójrz na opcję defaultDate. Zapewnia dokładnie te funkcje, których potrzebujesz.

Ponieważ domyślne opcje daty będą się różnić w każdym zbiorze danych, konieczne będzie ich osobne zainicjowanie (zasadniczo kopiowanie i wklejanie, aby dopasować).

http://api.jqueryui.com/datepicker/#option-defaultDate

+0

Ale myślałem, że to jedna była przeznaczona dla ustawiania daty w kalendarzu, ale nie samo pole tekstowe? –

+0

Przepraszam, to prawda. Odpowiedź @ GregL jest najlepsza w tym przypadku. – Wireblue

+0

Mimo to, dziękuję za link! :) –