jQuery datepicker ustawia wybraną datę w locie


121

Jak mogę dynamicznie w locie zmienić wybraną datę w selektorze dat jQuery? Powiedziałem, że stworzyłem wbudowany selektor dat. Po jakimś czasie chcę odzwierciedlić tam inną datę bez ponownego tworzenia datepicker od zera.

Próbowałem metody setDate, ale nie działa, i nie ma wiele dokumentacji w doc .

Jest jeszcze inny (inne?) Plugin tutaj , ale chcę używać wtyczki, która jest dostarczana z jquery.ui.all.js.

Odpowiedzi:


187

Jakiej wersji jQuery-UI używasz? Przetestowałem następujące z 1.6r6, 1.7 i 1.7.1 i działa:

//Set DatePicker to October 3, 2008
$('#dateselector').datepicker("setDate", new Date(2008,9,03) );

16
użyj defaultDate zamiast setDate, jeśli setDate nie działa.
bingjie2680

8
ale dla mnie to i tak nie zadziałało. data została zmieniona, ale wybrana data nie pojawia się w kalendarzu. pokazuje mi tylko dzisiaj podświetlony.
Prageeth godage

28

Sprawdź, czy data, którą próbujesz ustawić, mieści się w dozwolonym zakresie dat, jeśli są ustawione opcje minDate lub maxDate.


10

Ten przykład pokazuje, jak używać wartości domyślnej w rozwijanym kalendarzu i wartości w polu tekstowym. Pokazuje również, jak ustawić domyślną wartość na poprzednią datę.

selectedDate to kolejna zmienna, która przechowuje aktualnie wybraną datę kontrolki kalendarza

    var date = new Date();
    date.setDate(date.getDate() - 1);

    $("#datepicker").datepicker({
        dateFormat: "yy-mm-dd",
        defaultDate: date,
        onSelect: function () {
            selectedDate = $.datepicker.formatDate("yy-mm-dd", $(this).datepicker('getDate'));
        }
    });

    $("#datepicker").datepicker("setDate", date);

8

Zauważyłem, że dla DatePicker autorstwa Keitha Wooda ( http://keith-wood.name/datepickRef.html ) działa następująco - pamiętaj, że ustawienie domyślnej daty jest ostatnie:

    $('#datepicker').datepick({
        minDate: 0,
        maxDate: '+145D',
        multiSelect: 7,
        renderer: $.datepick.themeRollerRenderer,
        ***defaultDate: new Date('1 January 2008')***
    });

7

Z jakiegoś powodu w niektórych przypadkach nie mogłem uruchomić setDate.

Rozwiązaniem, które znalazłem, jest po prostu zaktualizowanie atrybutu value danego wejścia. Oczywiście sam datapicker nie zostanie zaktualizowany, ale jeśli po prostu szukasz daty, działa dobrze.

var date = new Date(2008,9,3);
$("#your-input").val(date.getMonth()+"/"+date.getDate()+"/"+date.getFullYear());
// Will display 9/3/2008 in your #your-input input

6
Miesiącami jest przerwa o jeden, więc potrzebujesz (date.getMonth () + 1)
Adam

1
setDate nie działa, jeśli jest ustawione w początkowych opcjach, miałem go później w łańcuchu z .datepicker ('setDate', ...)
martinedwards

4
$('.date-pick').datePicker().val(new Date()).trigger('change')

wreszcie tego szukam przez ostatnie kilka godzin! Potrzebuję zainicjować zmiany, a nie tylko datę konfiguracji w polu tekstowym!


2
Powinno być .datepicker()nie.datePicker()
Arslan Tabassum

3

To jest stary wątek, ale chcę tylko podać kilka informacji, w jaki sposób korzystałem. Jeśli chcesz ustawić dzisiejszą datę, możesz po prostu zastosować ją jak poniżej.

 $("#datepickerid").datepicker("setDate", "0");

Jeśli chcesz ustawić kilka dni przed / po bieżącej dacie, użyj symbolu -/+symbolu liczby dni, które chcesz ustawić poniżej.

 $("#datepickerid").datepicker("setDate", "-7");
 $("#datepickerid").datepicker("setDate", "+5");

2

setDate wydaje się być problemem tylko z wbudowanym datepicker używanym w interfejsie użytkownika jquery, konkretnym błędem jest InternalError: za dużo rekursji.


2

To działa dla mnie:

$("#dateselector").datepicker("option", "defaultDate", new Date(2008,9,3));

2

W HTML możesz dodać swoje pole wejściowe za pomocą takiego selektora dat

<input class="form-control date-picker fromDates" id="myDate" type="text">

a następnie w skrypcie java zainicjuj swój datepicker i ustaw wartość na taką datę,

$('.fromDates').datepicker({
                maxDate: '0',
                dateFormat: "dd/mm/yy",
                changeYear: true,
                changeMonth: true,
                yearRange: "-100:+0"
            });

var myDateVal = moment('${value}').format('DD/MM/YYYY');
$('#myDate').datepicker().datepicker('setDate', myDateVal );

(Tutaj atrybut fromdate pokazuje poprzednie daty bieżącej daty)


0
var dt = new Date();
var renewal = moment(dt).add(1,'year').format('YYYY-MM-DD');
// moment().add(number, period)
// moment().subtract(number, period)
// period : year, days, hours, months, week...

Odpowiedzi zawierające tylko kod są odradzane w przypadku przepełnienia stosu, ponieważ nie wyjaśniają, w jaki sposób rozwiązuje problem. Edytuj swoją odpowiedź, aby wyjaśnić, co robi kod i jak odpowiada na pytanie, tak aby była przydatna również dla innych użytkowników, a także dla OP.
FluffyKitten

-1

Miałem też sporo problemów z metodą setDate. wydaje się działać tylko w v1. Wydaje się jednak, że działa metoda dpSetSelected:

    $("#dateselector").dpSetSelected(new Date(2010, 0, 26).asString());

powodzenia!


-1

lub możesz po prostu mieć

$('.date-pick').datePicker().val(new Date()).trigger('change')

1
Powinno być .datepicker()nie .datePicker().
Florin Frătică
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.