jQuery Date picker not moving with page scroll

前端 未结 5 1102
陌清茗
陌清茗 2020-12-06 11:24

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/

相关标签:
5条回答
  • 2020-12-06 11:40

    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.

    0 讨论(0)
  • 2020-12-06 11:43

    Just remove height: 100% rule from html selector. That's solves problem.

    0 讨论(0)
  • 2020-12-06 11:44

    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.

    0 讨论(0)
  • 2020-12-06 11:52

    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.

    0 讨论(0)
  • 2020-12-06 11:59

    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)

    0 讨论(0)
提交回复
热议问题