9

I have a page which contains a form and few fields. My issues are as follow:

  1. I am trying to force jQuery UI datepicker to display below the input field.
  2. When I click in the input field, I want the field to scroll to the top of the page also. I think I have this working.

Here is my jQuery:

JQUERY:

$( document ).ready(function() {
    // Set Datepicker
    $(".datepicker").datepicker();

    $("input").focus(function () {
       $('html, body').animate({ scrollTop: $(this).offset().top - 25 }, 10);
   });

});

Link to a fiddle: https://jsfiddle.net/MauriceT/0qfycgm1/10/

Here is what I want to avoid:

Datepicker displays above the input field

Any suggestions would be greatly appreciated. Thanks!

2
  • what do you meant by below the input ? Do you want the input field to overlay over the date picker ? Commented Jul 15, 2016 at 15:13
  • So I need the datepicker to display below the field no matter what. At the moment, If you click on the datepicker and there is space above the field, the datepicker will appear above the field. Click the link in the image of my question for a visual. Thanks! Commented Jul 15, 2016 at 15:19

4 Answers 4

17

you can achieve your goal by setting the css of the date picker pop.

Use the below code to set the CSS, the use of setTimeout is to avoid the overriding of the CSS.

Here i am finding out the top and left of the date time picker text box and using these value to set the position of the date time picker popup

On the information about beforeShow event check here.

https://api.jqueryui.com/datepicker/#option-beforeShow

    $(".datepicker").datepicker({
    beforeShow: function (input, inst) {
        setTimeout(function () {
            inst.dpDiv.css({
                top: $(".datepicker").offset().top + 35,
                left: $(".datepicker").offset().left
            });
        }, 0);
    }
}); 

Here is the fiddle : https://jsfiddle.net/0qfycgm1/14/

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks @Deep. Can you explain your use of setTimeout a bit more? Thanks.
1

A simple fix is by adjusting the frontend using CSS for the CALENDER Box.

Add the following to your CSS file.

    .ui-datepicker{
        margin-top: 300px;
    }

I tried it in your Fiddle link, was working perfectly fine.

5 Comments

Thanks for your response, Ankush! However, I'm not sure this is a robust solution because If I scroll down the page and select the datepicker, the datepicker will appear 300px below the field. I need something more dynamic.
From what I comprehend, the CALENDER box is appearing above the date-picker input field, but you want it to be displayed below it.? Is it so, or do you want something else?
Oh i get the SCROLL problem you mentioned. And it persists in case of top-margin: 0px also and hence Jayanti Lal's solution ain't working as well.
Check this out stackoverflow.com/questions/15131465/… The same as specified by @Deep
Thank you, Ankush! I have marked @Deep's answer as the resolved answer.
1

add

       ui-datepicker{
          margin-top: 0px;
          }

I have added this code to your fiddle and have tested it. hope this will help. have updated your fiddle

Comments

0

Following line of code from jquery-ui-(version) sets your object top position to be zero so it is displayed wrong.Comment the line of code you will get what you want. I spend lots of days found no better solution than this.

offset = $.datepicker._checkOffset( inst, offset, isFixed );

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.