Geliştirdiğim yeni bir sitenin birkaç sayfası için bu sorunu çözmeye çalışırken çok fazla zaman harcadım ve hiçbir şey işe yaramadı (yukarıda sunduğum çeşitli çözümlerden herhangi biri dahil. JQuery'nin değiştiğini tahmin ediyorum. Çözümlerin artık çalışmadığı önerildiğinden, işler yeterince arttı. Bilmiyorum. Dürüst olmak gerekirse, jQuery kullanıcı arayüzünde bunu yapılandırmak için neden basit bir şey olmadığını anlamıyorum, göründüğü gibi takvimin her zaman eklendiği girişten sayfanın oldukça aşağısındaki bir konumda ortaya çıkmasıyla ilgili oldukça büyük bir sorun.
Her neyse, onu her yerde kullanabileceğim ve işe yarayacak kadar genel bir son çözüm istedim. Görünüşe göre nihayet yukarıdaki daha karmaşık ve jQuery koduna özgü bazı cevaplardan kaçınan bir sonuca ulaştım:
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());
});
Esasen, her tarih seçici "show" etkinliğinden önce başa yeni bir stil etiketi ekliyorum (varsa bir öncekini silerek). Bir şeyler yapmanın bu yöntemi, geliştirme sırasında karşılaştığım sorunların büyük çoğunluğunu çözüyor.
Chrome, Firefox, Safari ve IE> 8'de test edildi (IE8, jsFiddle ile iyi çalışmadığından ve bakım için zevki kaybediyorum
Bunun jQuery ve javascript bağlamlarının bir karışımı olduğunu biliyorum, ancak bu noktada onu jQuery'ye dönüştürmek için çaba sarf etmek istemiyorum. Basit olurdu, biliyorum. Şu anda bu işi çok bitirdim. Umarım bir başkası bu çözümden yararlanabilir.