Подтвердить что ты не робот

Выделить даты в jquery UI datepicker

Как я могу использовать beforeShowDay для выделения дней в jQuery UI datepicker. У меня есть следующий массив дат

Array
(
    [0] => 2011-07-07
    [1] => 2011-07-08
    [2] => 2011-07-09
    [3] => 2011-07-10
    [4] => 2011-07-11
    [5] => 2011-07-12
    [6] => 2011-07-13
)
4b9b3361

Ответ 1

Я решил проблему, используя

var disabledDays = ["2011-7-21","2011-7-24","2011-7-27","2011-7-28"];
var date = new Date();
jQuery(document).ready(function() { 
    $( "#dateselector").datepicker({ 
        dateFormat: 'yy-mm-dd',
        beforeShowDay: function(date) {
            var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
            for (i = 0; i < disabledDays.length; i++) {
                if($.inArray(y + '-' + (m+1) + '-' + d,disabledDays) != -1) {
                    //return [false];
                    return [true, 'ui-state-active', ''];
                }
            }
            return [true];

        }
    });
});

Ответ 2

Посмотрите документацию.

beforeShowDay Функция принимает дату как параметр и должна возвращать массив с [0] равным true/false, указывающий, выбрана ли эта дата или нет, [1], равное имени класса CSS или '' для представления по умолчанию, и [2] необязательная всплывающая подсказка для этой даты. Он вызывается для каждого дня в datepicker перед его отображением.

Это означает, что вам нужно создать функцию, которая будет принимать дату и вернуть массив параметров, где значения:

  • boolean - указывает, может ли быть выбрана дата
  • string - имя класса css, которое будет привязано к дате
  • string - необязательная всплывающая подсказка для этой даты

вот пример:

var your_dates = [new Date(2011, 7, 7),new Date(2011, 7, 8)]; // just some dates.

$('#whatever').datepicker({
   beforeShowDay: function(date) {
      // check if date is in your array of dates
      if($.inArray(date, your_dates)) {
         // if it is return the following.
         return [true, 'css-class-to-highlight', 'tooltip text'];
      } else {
         // default
         return [true, '', ''];
      }
   }
});

и теперь вы можете добавить стиль, чтобы выделить дату

<style>
   .css-class-to-highlight{
       background-color: #ff0;
   }
</style>

Ответ 3

Нашел самый проголосовавший ответ, который не работает. Обновленный код немного, чтобы заставить его работать. $.inArray() в основном ищет indexOf(). Также мы не можем сравнивать две даты непосредственно для равенства. Ссылка: Сравните две даты с JavaScript

function inArrayDates(needle, haystack){
    var found = 0;
    for (var i=0, len=haystack.length;i<len;i++) {
        if (haystack[i].getTime() == needle.getTime()) return i;
            found++;
        }
    return -1;
}

И обновите принятую функцию как

if(inArrayDates(date, markDates) != -1) {
            return [true, 'selected-highlight', 'tooltip here'];
          } else {
             return [true, '', ''];
          }

Ответ 4

http://jqueryui.com/demos/datepicker/#event-beforeShowDay

Вы сравниваете параметр date в beforeShowDay с датами, которые вы получили в своем массиве, и если есть совпадение, вы возвращаете массив, как определено в ссылке выше.

В массиве, который вы возвращаете из beforeShowDay, второй элемент используется для установки имени класса, которое будет использоваться в дате, затем вы можете использовать css для установки стилей для этого класса.

Ответ 5

Даты в JS являются экземплярами объекта Date, поэтому вы не можете правильно проверить, соответствуют ли даты с помощью == или ===.

Простое решение:

var your_dates = [
   new Date(2017, 4, 25),
   new Date(2017, 4, 23)
];

$( "#some_selector" ).datepicker({
    beforeShowDay: function(date) {
        are_dates_equal = d => d.getTime() === date.getTime();
        if(your_dates.some(are_dates_equal)) {
            return [true, 'ui-state-active', ''];
        }
        return [true, '', ''];
    }
})