Отключите определенные даты и включите определенные дни недели в jQuery datepicker - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь отключить определенные даты и включить только определенные дни недели в датчике jQuery UI.

Это внутри темы Wordpress / Woocommerce, и я пытаюсь решить некоторые ошибки, но яЯ часами пытаюсь найти решение и даже пробовал каждое решение, найденное мной на StackOverflow и других веб-сайтах, но, похоже, ничего не работает.

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

Код (с некоторыми жестко закодированными образцами):

$(document).ready(function(){
    var available_days = ["3"]; //it comes from the database
    var today = new Date();
    var tour_start_date = new Date( 1525132800000 ); //it comes from the database
    var tour_end_date = new Date( 1546214400000 ); //it comes from the database
    var available_first_date = tour_end_date;
    var lang = 'en_UK';

    lang = lang.replace( '_', '-' );

    today.setHours(0, 0, 0, 0);
    tour_start_date.setHours(0, 0, 0, 0);
    tour_end_date.setHours(0, 0, 0, 0);

    if ( today > tour_start_date ) {
        tour_start_date = today;
    }

    function DisableDays(date) {
        var day = date.getDay();

        if ( available_days.length == 0 ) {
            if ( available_first_date >= date && date >= tour_start_date) {
                available_first_date = date;
            }
            return true;
        }

        if ( $.inArray( day.toString(), available_days ) >= 0 ) {
            if ( available_first_date >= date && date >= tour_start_date) {
                available_first_date = date;
            }
            return true;
        } else {
            return false;
        }
    }
    if ( $('input.date-pick').length ) {
        if ( lang.substring( 0, 2 ) != 'fa' ) {
            $('input.date-pick').datepicker({
                startDate: tour_start_date,
                endDate: tour_end_date,
                beforeShowDay: DisableDays,
                language: lang
            });
            $('input[name="date"]').datepicker( 'setDate', available_first_date );
        } else {
            var date_format = $('input.date-pick').data('date-format');
            $('input.date-pick').persianDatepicker({
                observer: true,
                format: date_format.toUpperCase(),
            });
        }
    }
});

1 Ответ

0 голосов
/ 30 мая 2018

Пожалуйста, просмотрите: http://api.jqueryui.com/datepicker/#option-beforeShowDay

Функция, которая принимает дату в качестве параметра и должна возвращать массив с:

[0]: true / false, указывающий, является ли илине эта дата может быть выбрана

[1]: имя класса CSS для добавления в ячейку даты или "" для презентации по умолчанию

[2]: дополнительная всплывающая подсказка для этой даты

Проблема в вашем коде заключалась в том, что вы возвращали true или false только тогда, когда был необходим массив.Например:

$(function() {
  var available_days = ["3", "5"]; //it comes from the database
  var today = new Date();
  var tour_start_date = new Date(1525132800000); //it comes from the database
  var tour_end_date = new Date(1546214400000); //it comes from the database
  var available_first_date = tour_end_date;
  var lang = 'en_UK';

  lang = lang.replace('_', '-');

  today.setHours(0, 0, 0, 0);
  tour_start_date.setHours(0, 0, 0, 0);
  tour_end_date.setHours(0, 0, 0, 0);

  if (today > tour_start_date) {
    tour_start_date = today;
  }

  function DisableDays(date) {
    var day = date.getDay();
    var found = false;

    if (available_days.length == 0) {
      if (available_first_date >= date && date >= tour_start_date) {
        available_first_date = date;
      }
      found = true;
    }
    if ($.inArray(day.toString(), available_days) >= 0) {
    console.log(day + " in Array");
      if (available_first_date >= date && date >= tour_start_date) {
        available_first_date = date;
      }
      found = true;
    }
    console.log(day, found);
    return [found, "tour-date", "Tour Date"];
  }
  if ($('input.date-pick').length) {
    if (lang.substring(0, 2) != 'fa') {
      $('input.date-pick').datepicker({
        startDate: tour_start_date,
        endDate: tour_end_date,
        beforeShowDay: DisableDays,
        language: lang
      });
      $('input[name="date"]').datepicker('setDate', available_first_date);
    } else {
      var date_format = $('input.date-pick').data('date-format');
      $('input.date-pick').persianDatepicker({
        observer: true,
        format: date_format.toUpperCase(),
      });
    }
  }
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.12.4.js"></script>
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

Date: <input type="text" class="date-pick" name="date" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...