Masz pomysł, jak sprawić, by DatePicker pojawiał się na końcu skojarzonego pola tekstowego zamiast bezpośrednio pod nim? Zwykle zdarza się, że pole tekstowe znajduje się na dole strony, a DatePicker przesuwa się w górę, aby to uwzględnić i całkowicie zakrywa pole tekstowe. Jeśli użytkownik chce wpisać datę zamiast ją wybrać, nie może. Wolałbym, aby pojawiał się tuż za polem tekstowym, więc nie ma znaczenia, jak dopasowuje się w pionie.
Masz pomysł, jak kontrolować pozycjonowanie? Nie widziałem żadnych ustawień widżetu i nie miałem szczęścia modyfikować ustawień CSS, ale łatwo mogłem czegoś przegapić.
Odpowiedzi:
Przyjęta odpowiedź na to pytanie w rzeczywistości nie dotyczy Datepicker interfejsu użytkownika jQuery. Aby zmienić położenie Datepicker jQuery UI, wystarczy zmodyfikować .ui-datepicker w pliku css. Rozmiar Datepicker można również zmienić w ten sposób, wystarczy dostosować rozmiar czcionki.
źródło
Oto czego używam:
Możesz też chcieć dodać trochę więcej do lewego marginesu, aby nie było dokładnie naprzeciw pola wprowadzania.
źródło
$(this).position(my:'left top', at:'left bottom', of:'#altField')
(ponieważ używamaltField
opcji datepicker do wyświetlania)Robię to bezpośrednio w CSS:
Moje pola wprowadzania daty mają szerokość 100 pikseli. Dodałem również indeks z, więc kalendarz pojawia się również nad wyskakującymi okienkami AJAX.
Nie modyfikuję pliku CSS jquery-ui; Przeciążam klasę w moim głównym pliku CSS, więc mogę zmienić motyw lub zaktualizować widżet bez konieczności ponownego wprowadzania moich konkretnych modów.
źródło
Oto moja odmiana wyrównywania kalendarza Datepicker.
Myślę, że to całkiem fajne, ponieważ możesz kontrolować pozycjonowanie za pomocą narzędzia jQuery UI Position.
Jedno ograniczenie: wymagany plik jquery.ui.position.js.
Kod:
źródło
afterShow
metodzie.Oto kolejna wariacja, która działa dobrze dla mnie, dostosuj prawy górny + 40, prawy lewy + 0 do swoich potrzeb:
źródło
To działa dla mnie:
źródło
Po pierwsze, myślę, że
afterShowing
w obiekcie datepicker powinna znajdować się metoda, w której można by zmienić pozycję po tym, jak jquery wykona całe swoje voodoo w_showDatepicker
metodzie. DodatkowopreferedPosition
pożądany byłby również parametr o nazwie , więc można by go ustawić i zmodyfikować jquery w przypadku, gdy okno dialogowe jest renderowane poza rzutnią.Jest pewna sztuczka, aby zrobić ostatnią rzecz. Jeśli przestudiujesz tę
_showDatepicker
metodę, zobaczysz użycie zmiennej prywatnej$.datepikcer._pos
. Ta zmienna zostanie ustawiona, jeśli nikt wcześniej jej nie ustawił. Jeśli zmodyfikujesz tę zmienną przed wyświetleniem okna dialogowego, Jquery weźmie ją i spróbuje przydzielić okno dialogowe w tej pozycji, a jeśli wyrenderuje się poza ekranem, dostosuje je, aby upewnić się, że jest widoczne. Brzmi nieźle, co?Rzecz w tym;
_pos
jest prywatny, ale jeśli nie masz nic przeciwko temu. Możesz:Uważaj jednak na aktualizacje Jquery-ui, ponieważ zmiana w wewnętrznej implementacji
_showDatepicker
może spowodować uszkodzenie kodu.źródło
Musiałem ustawić datepicker zgodnie z nadrzędnym elementem div, w którym znajdowała się moja kontrola danych wejściowych bez obramowania. Aby to zrobić, użyłem narzędzia „position” zawartego w rdzeniu interfejsu użytkownika jquery. Zrobiłem to podczas wydarzenia beforeShow. Jak skomentowali inni powyżej, nie można ustawić pozycji bezpośrednio w beforeShow, ponieważ kod datepicker zresetuje lokalizację po zakończeniu funkcji beforeShow. Aby to obejść, po prostu ustaw pozycję za pomocą setInterval. Bieżący skrypt zakończy działanie, pokazując datepicker, a następnie kod repozycjonowania zostanie uruchomiony natychmiast po wyświetleniu datepicker. Chociaż nigdy nie powinno się to zdarzyć, jeśli datapicker nie jest widoczny po 0,5 sekundach, kod jest odporny na awarie, aby zrezygnować i wyczyścić interwał.
źródło
bind focusin po użyciu datepicker zmiana css widgetu datepicker'a życzę pomocy
źródło
naprawiłem to za pomocą mojego niestandardowego kodu jQuery.
nadałem mojemu polu wejściowemu Datepicker klasę „ .datepicker2 ”
znaleźć aktualną pozycję od góry i
umieścił wyskakujące okienko, którego nazwa klasy to „ .ui-datepicker ”
oto mój kod.
tutaj "40" to mój oczekiwany piksel, możesz zmienić swój.
źródło
napraw problem z pozycją pokazu daterangepicker.jQuery.js
źródło
Bardzo prosta funkcja jquery.
źródło
Spędziłem absurdalnie dużo czasu próbując rozwiązać ten problem przez kilka stron nowej witryny, którą tworzę i nic nie wydawało się działać (w tym dowolne z różnych rozwiązań przedstawionych powyżej, które wdrożyłem. Zgaduję, że jQuery właśnie się zmieniło wystarczająco dużo, ponieważ zasugerowano, że rozwiązania już nie działają. Nie wiem. Szczerze mówiąc, nie rozumiem, dlaczego nie ma czegoś prostego zaimplementowanego w interfejsie użytkownika jQuery, aby to skonfigurować, jak się wydaje dość duży problem polegający na tym, że kalendarz zawsze pojawia się w jakimś miejscu znacznie daleko w dół strony od wejścia, do którego jest dołączony.
W każdym razie chciałem rozwiązania końcowego, które byłoby na tyle ogólne, że mógłbym go używać wszędzie i zadziałałoby. Wydaje się, że w końcu doszedłem do wniosku, który pozwala uniknąć niektórych z bardziej skomplikowanych i specyficznych dla kodu jQuery odpowiedzi powyżej:
jsFiddle: http://jsfiddle.net/mu27tLen/
HTML:
JS:
Zasadniczo dołączam nowy tag stylu do głowy przed każdym zdarzeniem „show” datepicker (usuwanie poprzedniego, jeśli jest obecny). Ta metoda robienia rzeczy pozwala obejść większość problemów, które napotkałem podczas programowania.
Testowane na Chrome, Firefox, Safari i IE> 8 (ponieważ IE8 nie działa dobrze z jsFiddle i tracę zamiłowanie do dbania o
Wiem, że jest to mieszanka kontekstów jQuery i javascript, ale w tym momencie po prostu nie chcę wkładać wysiłku w konwersję go do jQuery. Wiem, byłoby proste. Skończyłem z tym teraz. Mam nadzieję, że ktoś inny może skorzystać z tego rozwiązania.
źródło
Zmienili nazwę klasy na
ui-datepicker-trigger
Więc to działa
jquery 1.11.x
źródło
Wziąłem to z (( How to control position of jQueryUI datepicker ))
$ .extend ($. datepicker, {_checkOffset: function (inst, offset, isFixed) {return offset}});
to działa !!!
źródło
Możesz też użyć zdarzenia focus na swoim obiekcie dateSelect i jednocześnie umieścić api. Możesz zamienić górną i dolną oraz lewą stronę na prawą lub środkową (lub naprawdę cokolwiek chcesz z api pozycji). W ten sposób nie potrzebujesz interwału ani niewiarygodnie złożonego rozwiązania i możesz skonfigurować układ tak, aby odpowiadał Twoim potrzebom w zależności od tego, gdzie jest wejście.
źródło
Warto również zauważyć, że jeśli IE wpadnie w tryb dziwactw, komponenty interfejsu użytkownika jQuery i inne elementy zostaną niepoprawnie ustawione.
Aby upewnić się, że nie wpadniesz w tryb dziwactw, upewnij się, że poprawnie ustawiłeś swój doctype na najnowszy HTML5.
Korzystanie z trybu przejściowego powoduje bałagan. Mam nadzieję, że pozwoli to komuś zaoszczędzić trochę czasu w przyszłości.
źródło
Umieszcza to funkcjonalność w metodzie o nazwie function, umożliwiając kodowi jej hermetyzację lub przekształcenie metody w rozszerzenie jquery. Po prostu użyty w moim kodzie, działa idealnie
źródło
W Jquery.UI po prostu zaktualizuj funkcję _checkOffset, tak aby parametr viewHeight był dodawany do offset.top, zanim zostanie zwrócone przesunięcie.
źródło
źródło
źródło