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:
<input type="text" class="datePicker" />
JS:
positionDatePicker= function(cssToAdd) {
/* Remove previous positioner */
var oldScript= document.getElementById('datePickerPosition');
if(oldScript) oldScript.parentNode.removeChild(oldScript);
/* Create new positioner */
var newStyle= document.createElement("style");
newStyle.type= 'text/css';
newStyle.setAttribute('id', 'datePickerPostion');
if(newStyle.styleSheet) newStyle.styleSheet.cssText= cssToAdd;
else newStyle.appendChild(document.createTextNode(cssToAdd));
document.getElementsByTagName("head")[0].appendChild(newStyle);
}
jQuery(document).ready(function() {
/* Initialize date picker elements */
var dateInputs= jQuery('input.datePicker');
dateInputs.datepicker();
dateInputs.datepicker('option', {
'dateFormat' : 'mm/dd/yy',
'beforeShow' : function(input, inst) {
var bodyRect= document.body.getBoundingClientRect();
var rect= input.getBoundingClientRect();
positionDatePicker('.page #ui-datepicker-div{z-index:100 !important;top:' + (rect.top - bodyRect.top + input.offsetHeight + 2) + 'px !important;}');
}
}).datepicker('setDate', new Date());
});
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.