jQuery Datepicker — добавляет класс в зависимости от того, где он появляется

#jquery #jquery-ui #datepicker

#jquery #jquery-пользовательский интерфейс #datepicker

Вопрос:

Мне нужно добавить класс «выше» или «ниже» к моему элементу ввода в зависимости от того, с какой стороны открылся datepicker.

Я просто не могу понять, как получить позицию экземпляра datepicker, который вот-вот будет создан …. может быть, я просто неправильно об этом думаю.

      $('#order-main .datepicker').datepicker({
    showOn: 'both',

     buttonImage: 'img/icons/calendar.png',
     buttonImageOnly: true,
     minDate: -1,
     maxDate: " 1Y",
     showButtonPanel: true,
     showAnim: 'slideDown',
     hideIfNoPrevNext: true,
     dateFormat: 'yyyy-mm-dd',
     duration: 500,
     beforeShow: function(input, inst) {
      var pos = $(input).offset().top;
      // if the top position of the to-be-created instance is < top position 
      //of the elemnt, its ABOVE, therefore add above, otherwise add below.
          inst.dpDiv.addClass('above')
         }
    });
  

Я знаю, как расширить его с помощью $.extend($.datepicker,{_checkOffset: function(inst,offset, IsFixed){return offset}}); поэтому он всегда будет отображаться ниже, но я бы предпочел сохранить его функциональность динамического размещения, но просто ЗНАЮ, находится ли он выше или ниже, чтобы я мог правильно оформить свой элемент ввода.

Небольшая вещь, но было бы неплохо ее выполнить.

Ответ №1:

Я думаю, это то, что вы ищете.

Используйте position вместо offset.

 beforeShow: function(input, inst) {
    if (inst.dpDiv.position().top > $(input).position().top) {
        inst.dpDiv
            .removeClass('below')
            .addClass('above');
    } else {
        inst.dpDiv
            .removeClass('above')
            .addClass('below');
    }
}