내가 개발중인 새 사이트의 여러 페이지에 대해이 문제를 파악하는 데 엄청나게 많은 시간을 보냈지 만 아무것도 작동하지 않는 것 같았습니다 (위에서 구현 한 다양한 솔루션 포함). 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());
});
기본적으로 모든 datepicker "show"이벤트 (존재하는 경우 이전 항목 삭제) 전에 새 스타일 태그를 머리에 첨부합니다. 이 작업을 수행하는 방법은 개발 중에 발생한 대부분의 문제를 해결합니다.
Chrome, Firefox, Safari 및 IE> 8에서 테스트했습니다 (IE8은 jsFiddle과 잘 작동하지 않기 때문에 관심을 잃고 있습니다.
이것이 jQuery와 javascript 컨텍스트의 혼합이라는 것을 알고 있지만이 시점에서는 jQuery로 변환하는 데 노력을 기울이고 싶지 않습니다. 간단 할 것입니다. 나는 지금이 일을 끝냈다. 다른 사람이이 솔루션의 혜택을받을 수 있기를 바랍니다.