ฉันใช้เวลาอย่างไร้สาระในการพยายามหาปัญหานี้ในหลาย ๆ หน้าของไซต์ใหม่ที่ฉันกำลังพัฒนาและดูเหมือนจะไม่มีอะไรทำงาน (รวมถึงวิธีแก้ปัญหาต่างๆที่นำเสนอข้างต้นที่ฉันใช้ฉันเดาว่า 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());
});
โดยพื้นฐานแล้วฉันแนบแท็กสไตล์ใหม่ไว้ที่ส่วนหัวก่อนเหตุการณ์ "show" ของ datepicker ทุกครั้ง (ลบรายการก่อนหน้าหากมี) วิธีการทำสิ่งต่างๆนี้ได้รับปัญหาส่วนใหญ่ที่ฉันพบในระหว่างการพัฒนา
ทดสอบบน Chrome, Firefox, Safari และ IE> 8 (เนื่องจาก IE8 ทำงานได้ไม่ดีกับ jsFiddle และฉันสูญเสียความเอร็ดอร่อยในการดูแล
ฉันรู้ว่านี่เป็นการผสมผสานระหว่างบริบท jQuery และ javascript แต่ ณ จุดนี้ฉันไม่ต้องการใช้ความพยายามในการแปลงเป็น jQuery จะเป็นเรื่องง่ายฉันรู้ ฉันเสร็จแล้วกับสิ่งนี้ในตอนนี้ หวังว่าคนอื่นจะได้รับประโยชน์จากโซลูชันนี้