2010-09-30 13 views
49

Mam problem z datepicker jQuery-UI, przeszukano i przeszukano, ale nie znalazłem odpowiedzi. Mam następujący kod:datownik jQuery-UI domyślna data

<script type="text/javascript"> 
$(function() {    
    $("#birthdate").datepicker({ 
     changeMonth: true, 
     changeYear: true, 
     yearRange: '1920:2010', 
     dateFormat : 'dd-mm-yy', 
     defaultDate: '01-01-1985' 
    }); 
}); 
</script> 

chcę, że gdy użytkownik kliknie na wejściu #birthdate że bieżąca data wybrana jako 01-01-1985, teraz to ustawienie aktualnej daty.

+0

Twój kod jest prawidłowy, można dodać trochę więcej szczegółów? – Keeper

+1

jaki jest twój problem? Twój kod działa poprawnie. [patrz tutaj] (http://jsfiddle.net/MNBjS/) – Reigel

Odpowiedz

46

Spróbuj podać zamiast tego obiekt Date. Nie mogę zrozumieć, dlaczego to nie działa w formacie podałeś:

<script type="text/javascript"> 
$(function() {    
    $("#birthdate").datepicker({ 
     changeMonth: true, 
     changeYear: true, 
     yearRange: '1920:2010', 
     dateFormat : 'dd-mm-yy', 
     defaultDate: new Date(1985, 00, 01) 
    }); 
}); 
</script> 

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

Określ albo rzeczywistą datę poprzez obiektu Date lub w postaci ciągu znaków w current dateFormat lub liczba dni od dzisiaj (np. +7) lub ciąg wartości i okresów ("y" dla lat, "m" dla miesięcy, "w" dla tygodni, "d" dla dni, np. "+ 1m + 7d") lub null dla dzisiaj.

+1

Miałem podobny problem z OP w jQuery UI 1.7.3 - chociaż w wersji 1.8.4 było dobrze (musiał uruchomić 1.7.3 z powodu do dotychczasowego systemu z jQuery 1.3.2) - używając obiektu daty naprawiłem to wszystko. – HorusKol

+0

Dziękuję bardzo @Codesleuth za answer.it bardzo mi pomogło! –

+1

Boże, naprawdę nienawidzę "00" = styczeń dla Javascript. Na szczęście komentuję moje obiekty z datami za każdym razem, gdy deklaruję je w ten sposób, aby uniknąć jakichkolwiek pomyłek ... – Nelson

13

Możesz spróbować z kodem, który jest poniżej.

Spowoduje to, że domyślna data stanie się datą, której szukasz.

$('#birthdate').datepicker("setDate", new Date(1985,01,01)); 
+2

wiodące zera nie są dozwolone w świecie całkowitym – Christian

11

Widząc, że:

Ustaw datę, aby podświetlić na pierwszym otwarciu, jeśli pole jest puste. Podaj rzeczywistą datę za pomocą obiektu Date lub jako ciąg w bieżącej dateFormat, lub liczbę dni od dzisiaj (np. +7) lub ciąg wartości i okresów ("y" dla lat, "m" dla miesięcy, "w" dla tygodni, "d" dla dni, np. "+ 1m + 7d") lub na dzień dzisiejszy wartość pusta.

Jeśli prąd dateformat nie jest rozpoznawany, nadal można korzystać z obiektu Date korzystając new Date(year, month, day)

W przykładzie, to powinien działać (nie testowałem go):

<script type="text/javascript"> 
$(function() {    
    $("#birthdate").datepicker({ 
     changeMonth: true, 
     changeYear: true, 
     yearRange: '1920:2010', 
     dateFormat : 'dd-mm-yy', 
     defaultDate: new Date(1985,01,01) 
    }); 
}); 
</script> 
1

jQuery UI Datepicker jest zakodowany, aby zawsze podświetlać lokalną datę użytkownika przy użyciu klasy ui-state-highlight. Nie ma wbudowanej opcji, aby to zmienić.

Jedną z metod, podobnie opisane w innych odpowiedzi na pytania związane jest przesłonić CSS dla tej klasy, aby dopasować ui-state-default swojego tematu, na przykład:

.ui-state-highlight { 
    border: 1px solid #d3d3d3; 
    background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; 
    color: #555555; 
} 

Jednak nie jest to bardzo pomocne, jeśli używają dynamicznych motywów lub jeśli chcesz podkreślić inny dzień (np. "dziś" opierać się na zegarze serwera, a nie na kliencie).

Alternatywnym podejściem jest zastąpienie prototypu danych, który jest odpowiedzialny za podświetlanie bieżącego dnia.

Zakładając, że używasz zminimalizowanej wersji javascriptu UI, poniższe fragmenty mogą rozwiązać te problemy.


Jeśli twoim celem jest zapobieganie podkreślając aktualny dzień łącznie:

// copy existing _generateHTML method 
var _generateHTML = jQuery.datepicker.constructor.prototype._generateHTML; 
// remove the string "ui-state-highlight" 
_generateHtml.toString().replace(' ui-state-highlight', ''); 
// and replace the prototype method 
eval('jQuery.datepicker.constructor.prototype._generateHTML = ' + _generateHTML); 

To zmienia odpowiedni kod (unminimized dla czytelności) od:

[...](printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') + [...] 

do

[...](printDate.getTime() == today.getTime() ? '' : '') + [...] 

Jeśli twoim celem jest, aby zmienić definicję datepicker jest z "Today":

var useMyDateNotYours = '07/28/2014'; 
// copy existing _generateHTML method 
var _generateHTML = jQuery.datepicker.constructor.prototype._generateHTML; 
// set "today" to your own Date()-compatible date 
_generateHTML.toString().replace('new Date,', 'new Date(useMyDateNotYours),'); 
// and replace the prototype method 
eval('jQuery.datepicker.constructor.prototype._generateHTML = ' + _generateHTML); 

To zmienia odpowiedni kod (unminimized dla czytelności) od:

[...]var today = new Date();[...] 

do

[...]var today = new Date(useMyDateNotYours);[...] 
// Note that in the minimized version, the line above take the form `L=new Date,` 
// (part of a list of variable declarations, and Date is instantiated without parenthesis) 

Zamiast useMyDateNotYours można oczywiście również wstrzyknąć ciąg, funkcję lub cokolwiek, co odpowiada twoim potrzebom.

+1

Dziękuję! Być może nie było tego, czego potrzebował PO, ale tego właśnie pragnę. – Eterm

0

Jeśli chcesz zaktualizować podświetlony dzień na inny dzień w oparciu o czas serwera, możesz zmienić kod selektora daty, aby umożliwić nową niestandardową opcję o nazwie localToday lub cokolwiek innego, co chcesz nazwać.

mały uszczypnąć z wybraną odpowiedź w jQuery UI DatePicker change highlighted "today" date

// Get users 'today' date 
var localToday = new Date(); 
localToday.setDate(tomorrow.getDate()+1); // tomorrow 

// Pass the today date to datepicker 
$("#datepicker").datepicker({ 
    showButtonPanel: true, 
    localToday: localToday // This option determines the highlighted today date 
}); 

mam przesłonięte 2 metody datepicker warunkowo wykorzystywać nowe ustawienie na „Dzisiaj” daty zamiast new Date(). Nowe ustawienie nosi nazwę localToday.

Zastąp $.datepicker._gotoToday i $.datepicker._generateHTML tak:

$.datepicker._gotoToday = function(id) { 
    /* ... */ 
    var date = inst.settings.localToday || new Date() 
    /* ... */ 
} 

$.datepicker._generateHTML = function(inst) { 
    /* ... */ 
    tempDate = inst.settings.localToday || new Date() 
    /* ... */ 
} 

Oto demo który pokazuje pełny kod i użytkowanie: http://jsfiddle.net/NAzz7/5/

1

jQuery Datepicker defaultDate TYLKO ustawić domyślną datę, które wybrano w kalendarzu który pojawia się po kliknięciu pola. Jeśli chcesz, aby data domyślna wyświetlała się na wejściu, zanim użytkownik kliknie na pole, musisz podać wartość val() w polu. coś takiego:

$("#searchDateFrom").datepicker({ defaultDate: "-1y -1m -6d" }); 
$("#searchDateFrom").val((date.getMonth()) + '/' + (date.getDate() - 6) + '/' + (date.getFullYear() - 1)); 
0
$("#birthdate").datepicker("setDate", new Date(1985,01,01))