Make eternicode datepicker open on click, not focus

bootstrap-datepicker, datepicker, twitter-bootstrap

Solution

In the current version of the library, there's no official support for what you want to do. The docs list all the kinds of markup you can instantiate a datepicker on and what the resulting behaviours are. It's very clear that when instantiating a datepicker on an `<input>` element,

focusing the input (clicking or tabbing into it) will show the picker.

There is no markup you can instantiate a datepicker on that will trivially give you what you want. Nor are there any configuration options that let you choose what events will trigger the datepicker to appear.

As a result, to do what you want will require some reverse engineering of the library. Luckily, this is quite easy.

The simplest approach is to instantiate the datepicker on the `<input>` like you normally would, but then get rid of the `focus` handler ourselves and replace it with a `click` handler:

$('#my-input').datepicker()
              .off('focus')
              .click(function () {
                  $(this).datepicker('show');
              });

This works perfectly for the latest version of the library, as demonstrated by this http://jsfiddle.net/E4K56/1/

If you want to have extra elements (like a calendar button) that trigger the appearance of the datepicker, you can just attach handlers to them similarly:

$('#some-button').click(function () {
    $('#my-input').datepicker('show');
});

Problem

The eternicode twitter bootstrap datepicker pops up as soon as the `<input>` field it is attached to gets focus, as you can see by tabbing onto the datepicker field on the official demo page. Instead, I want it to only open on click. Ideally the datepicker would just pop up on click of the calendar icon. How can I prevent it from popping up on focus?

Original source