私が開発している新しいサイトのいくつかのページでこの問題を解決しようとして途方もない時間を費やしましたが、何もうまくいかないようでした (私が実装した上記のさまざまなソリューションのいずれも含みます。jQuery が変更されたばかりだと思います)。解決策が機能しなくなったことが示唆されたので、十分にうまくいっています.私にはわかりません.正直なところ、これを構成するためにjQuery uiに簡単に実装されたものがない理由がわかりません.カレンダーが添付されている入力からページのかなり下の位置に常にポップアップするというかなり大きな問題。
とにかく、どこでも使用でき、機能するように十分に汎用的な最終ソリューションが必要でした。上記のより複雑でjQueryコード固有の回答のいくつかを回避するという結論にようやく達したようです。
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());
});
基本的に、すべての日付ピッカーの「表示」イベントの前に、新しいスタイル タグをヘッドに付けます (存在する場合は前のタグを削除します)。この方法で、開発中に遭遇した問題の大部分を回避できます。
Chrome、Firefox、Safari、および IE > 8 でテスト済み (IE8 は jsFiddle でうまく動作せず、気にする気力を失っているため)
これが jQuery と JavaScript のコンテキストが混在していることはわかっていますが、現時点では、jQuery に変換することに力を入れたくありません。簡単でしょう、私は知っています。私は今、このことでとても終わっています。他の誰かがこのソリューションから恩恵を受けることを願っています。