I am using the standard jQuery UI datepicker ,However when i scroll the page the date picker remains fixed . Any ideas how to solve this ?
http://jsfiddle.net/jbK6a/
Couldn't find any answers on this using Bootstrap and datepicker that was having an issue with the datepicker staying attached to the element when scrolling on a modal. This was my solution:
var dateModals = (function() {
'use strict';
var currentInput = '';
var setPos = function() {
if (currentInput === '') return false;
var $datepicker = $('.datepicker');
var topPos = currentInput.offset().top + currentInput.outerHeight();
if ($datepicker.hasClass('datepicker-orient-bottom')) {
topPos -= $datepicker.outerHeight() + currentInput.parent('.date').outerHeight();
}
$datepicker.css('top', topPos);
};
var attachEvents = () => {
$('.modal').on('scroll', function() {
setPos();
});
$('.modal').on('click', '.date input.form-control', function() {
currentInput = $(this);
});
};
var initialize = (function() {
attachEvents();
})();
})();
If following Bootstrap & Datepicker syntax, this should play nicely.
Just remove height: 100% rule from html selector. That's solves problem.
To solve this problem in jQuery UI 1.11.4 I added a .bind() event to the end of the datepicker instantiation:
$("*selector*").datepicker({
*settings*
}).bind('click',function () {
$("#ui-datepicker-div").appendTo("*other-selector*");
});
In my case, the "other-selector" was $(this).closest('the-date-input-parent'). This picks up the single #ui-datepicker-div box (which jQuery UI places at the end of the DOM) and moves it to a location somewhere else within the document. This can be done for multiple datepickers on the same page.
The other-selector should have position: relative; set so that the absolutely positioned #ui-datepicker-div becomes positioned relative to the new parent. Once so, it scrolls just fine.
This solution was the easiest fix to this problem (though it took a lot of time and searching to come to this conclusion) and allowed the datepicker to work correctly on mobile devices and tablets where it would otherwise be unusable.
The problem is that the datepicker is outside the div
with overflow: scroll;
. If the datepicker was generated inside the container this wouldn't be a problem.
Solution: http://jsfiddle.net/jbK6a/15/
I placed the datepicker behind the input with the beforeShow
event.
And I used position: relative;
on the scrollable container so that de absolute element listens to the container.
With a little fiddling I managed to get the following:
http://jsfiddle.net/jbK6a/12/
Using this, the datepicker hides itself on page scroll. I believe there are jQuery methods to ascertain the scroll position and so with a bit more fiddling, you could then manually manipulate the datepicker and update its position based on this value...
UPDATE: Just fiddled a bit and got: http://jsfiddle.net/jbK6a/18/ which scrolls the datepicker, but it's really messy, any number of things can break it especially other collapsible elements. Fortunately Sem has a far better and cleaner solution :)
(Thought I'd add my code anyway though)