Haben Sie eine Idee, wie Sie den DatePicker am Ende des zugehörigen Textfelds anstatt direkt darunter anzeigen können? In der Regel befindet sich das Textfeld am unteren Rand der Seite, und der DatePicker wird nach oben verschoben, um dies zu berücksichtigen, und deckt das Textfeld vollständig ab. Wenn der Benutzer das Datum eingeben möchte, anstatt es auszuwählen, kann er dies nicht. Ich möchte es lieber direkt hinter dem Textfeld anzeigen lassen, damit es keine Rolle spielt, wie es vertikal angepasst wird.
Irgendeine Idee, wie man die Positionierung steuert? Ich habe keine Einstellungen für das Widget gesehen und hatte kein Glück, die CSS-Einstellungen zu optimieren, aber ich könnte leicht etwas vermissen.
javascript
jquery
jquery-ui
jquery-ui-datepicker
gfrizzle
quelle
quelle
Antworten:
Die akzeptierte Antwort auf diese Frage ist eigentlich nicht für den jQuery UI Datepicker. Um die Position des jQuery UI Datepickers zu ändern, ändern Sie einfach .ui-datepicker in der CSS-Datei. Auf diese Weise kann auch die Größe des Datepickers geändert werden. Passen Sie einfach die Schriftgröße an.
quelle
Folgendes verwende ich:
Möglicherweise möchten Sie dem linken Rand auch etwas mehr hinzufügen, damit er nicht direkt im Eingabefeld angezeigt wird.
quelle
$(this).position(my:'left top', at:'left bottom', of:'#altField')
(da ich diealtField
Option des Datepickers für die Anzeige verwende)Ich mache es direkt im CSS:
Meine Datumseingabefelder sind alle 100 Pixel breit. Ich habe auch den Z-Index hinzugefügt, damit der Kalender auch über AJAX-Popups angezeigt wird.
Ich ändere die CSS-Datei jquery-ui nicht. Ich überlade die Klasse in meiner CSS-Hauptdatei, damit ich das Thema ändern oder das Widget aktualisieren kann, ohne meine spezifischen Mods erneut eingeben zu müssen.
quelle
Hier ist meine Variante der Ausrichtung des Datepicker-Kalenders.
Ich finde es ziemlich schön, weil Sie die Positionierung über jQuery UI Position util steuern können.
Eine Einschränkung: jquery.ui.position.js erforderlich.
Code:
quelle
afterShow
Methode zulässt .Hier ist eine weitere Variante, die für mich gut funktioniert: Passen Sie das Rect.top + 40 und das Rect.left + 0 an Ihre Bedürfnisse an:
quelle
Das funktioniert bei mir:
quelle
Zuerst denke ich, dass es eine
afterShowing
Methode im Datepicker-Objekt geben sollte, mit der Sie die Position ändern können, nachdem jquery alle Voodoos in der_showDatepicker
Methode ausgeführt hat. Darüber hinauspreferedPosition
wäre auch ein aufgerufener Parameter wünschenswert, sodass Sie ihn festlegen und abfragen können, falls der Dialog außerhalb des Ansichtsfensters gerendert wird.Es gibt einen "Trick", um dieses letzte Ding zu machen. Wenn Sie die
_showDatepicker
Methode studieren , werden Sie die Verwendung einer privaten Variablen sehen$.datepikcer._pos
. Diese Variable wird eingerichtet, wenn sie noch niemand eingerichtet hat. Wenn Sie diese Variable ändern, bevor das Dialogfeld angezeigt wird, übernimmt Jquery sie und versucht, das Dialogfeld an dieser Position zuzuweisen. Wenn es außerhalb des Bildschirms gerendert wird, wird es angepasst, um sicherzustellen, dass es sichtbar ist. Hört sich gut an, oder?Das Problem ist;
_pos
ist privat, aber wenn dir das nichts ausmacht. Sie können:Achten Sie jedoch auf Jquery-ui-Updates, da eine Änderung in der internen Implementierung von
_showDatepicker
möglicherweise Ihren Code beschädigt .quelle
Ich musste den Datepicker gemäß einem übergeordneten Div positionieren, in dem sich meine randlose Eingabesteuerung befand. Dazu habe ich das Dienstprogramm "position" verwendet, das im Kern der jquery-Benutzeroberfläche enthalten ist. Ich habe das im beforeShow-Event gemacht. Wie andere oben kommentiert haben, können Sie die Position nicht direkt in beforeShow festlegen, da der Datepicker-Code den Speicherort nach Abschluss der beforeShow-Funktion zurücksetzt. Um dies zu umgehen, legen Sie die Position einfach mit setInterval fest. Das aktuelle Skript wird abgeschlossen und zeigt den Datepicker an. Anschließend wird der Neupositionierungscode sofort ausgeführt, nachdem der Datepicker sichtbar ist. Obwohl es niemals passieren sollte, wenn der Datums-Picker nach 0,5 Sekunden nicht sichtbar ist, hat der Code eine Ausfallsicherheit, um das Intervall aufzugeben und zu löschen.
quelle
Binden Sie den Fokus, nachdem Sie Datepicker verwendet haben. Ändern Sie die CSS des Widgets von Datepicker
quelle
Ich habe es mit meinem benutzerdefinierten JQuery-Code behoben.
gab meinem Datepicker-Eingabefeld eine Klasse " .datepicker2 "
Finden Sie die aktuelle Position von oben und
positionierte das Popup-Feld, dessen Klassenname " .ui-datepicker " ist.
Hier ist mein Code.
hier ist "40" mein erwartetes Pixel, Sie können mit Ihrem ändern.
quelle
Fix Show Position Problem daterangepicker.jQuery.js
quelle
Eine sehr einfache Abfragefunktion.
quelle
Ich habe lächerlich viel Zeit damit verbracht, dieses Problem für mehrere Seiten einer neuen Site herauszufinden, die ich entwickle, und nichts schien zu funktionieren (einschließlich einer der verschiedenen oben vorgestellten Lösungen, die ich implementiert habe. Ich vermute, jQuery hat sich gerade geändert Ich weiß nicht, ob die Lösungen nicht mehr funktionieren. Ehrlich gesagt verstehe ich nicht, warum in der jQuery-Benutzeroberfläche nicht einfach etwas implementiert ist, um dies so zu konfigurieren, wie es scheint Ein ziemlich großes Problem, bei dem der Kalender immer an einer Position weit unten auf der Seite von der Eingabe auftaucht, an die er angehängt ist.
Jedenfalls wollte ich eine Endlösung, die generisch genug war, dass ich sie überall verwenden konnte und sie funktionieren würde. Ich scheine endlich zu einem Schluss gekommen zu sein, der einige der komplizierteren und jQuery-Code-spezifischen Antworten oben vermeidet:
jsFiddle: http://jsfiddle.net/mu27tLen/
HTML:
JS:
Im Wesentlichen füge ich vor jedem Datepicker-Show-Ereignis ein neues Style-Tag am Kopf hinzu (lösche das vorherige, falls vorhanden). Diese Methode umgeht die meisten Probleme, auf die ich während der Entwicklung gestoßen bin.
Getestet auf Chrome, Firefox, Safari und IE> 8 (da IE8 mit jsFiddle nicht gut funktioniert und ich meine Begeisterung für das Sorgen verliere
Ich weiß, dass dies eine Mischung aus jQuery- und Javascript-Kontexten ist, aber an dieser Stelle möchte ich mich einfach nicht darum bemühen, es in jQuery zu konvertieren. Wäre einfach, ich weiß. Ich bin gerade so fertig mit diesem Ding. Hoffe, jemand anderes kann von dieser Lösung profitieren.
quelle
Sie haben den Klassennamen in geändert
ui-datepicker-trigger
Das funktioniert also in
jquery 1.11.x
quelle
Ich habe es genommen von (( So steuern Sie die Positionierung des jQueryUI-Datepickers ))
$ .extend ($. datepicker, {_checkOffset: function (inst, offset, isFixed) {return offset}});
Es klappt !!!
quelle
Oder Sie können das Fokusereignis für Ihr dateSelect-Objekt verwenden und die API zusammen positionieren. Sie können oben und unten und links gegen rechts oder in der Mitte tauschen (oder wirklich alles, was Sie von der Positions-API wollen). Auf diese Weise benötigen Sie kein Intervall oder eine wahnsinnig komplexe Lösung und können das Layout je nach Eingangsort entsprechend Ihren Anforderungen konfigurieren.
quelle
Es ist auch erwähnenswert, dass Ihre jQuery-UI-Komponenten und andere Elemente falsch positioniert werden, wenn der IE in den Quirks-Modus fällt.
Um sicherzustellen, dass Sie nicht in den Mackenmodus geraten, stellen Sie sicher, dass Sie Ihren Doctype korrekt auf den neuesten HTML5-Code eingestellt haben.
Die Verwendung von Transitional bringt die Dinge durcheinander. Hoffentlich spart dies jemandem in Zukunft etwas Zeit.
quelle
Dadurch wird die Funktionalität in eine Methode mit dem Namen function eingefügt, sodass Ihr Code sie kapseln oder die Methode zu einer jquery-Erweiterung machen kann. Nur für meinen Code verwendet, funktioniert perfekt
quelle
Aktualisieren Sie in Jquery.UI einfach die Funktion _checkOffset, sodass viewHeight zu offset.top hinzugefügt wird, bevor offset zurückgegeben wird.
quelle
quelle
quelle