Как получить даты, извлеченные из внешнего файла, для сопоставления дат в jq datepicker? - PullRequest
2 голосов
/ 12 января 2020

Я впервые обращаюсь за помощью, поэтому извиняюсь за неправильный формат или уровень детализации. Я хочу, чтобы даты выбора даты меняли свой цвет фона для всех дат, которые соответствуют набору дат в массиве дат (highlight_dates). Мой код работает с введенным вручную массивом, но НЕ для программно введенных дат.

Как сравнивать даты

Чтобы проверить, есть ли дата в массиве, я использую 'inArray '(L11 в следующем коде):

1.  $('#calendar').datepicker({
2.  beforeShowDay: function(date){
3.   var month = date.getMonth()+1;
4.  var year = date.getFullYear();
5.   var day = date.getDate();
6.   // Change format of date
7.   var newdate = day+"-"+month+'-'+year;
8.  // Set tooltip text when mouse over date
9.  var tooltip_text = "Results available for " + newdate;
10. // Check date in Array
11.  if(jQuery.inArray(newdate, highlight_dates) != -1){
12. return [true, "highlight", tooltip_text ];    
13. }
14. return [true];
15. }
16. }); 

(L12 "выделение" вызывает CSS форматирование) Это работает нормально, когда я использую массив, который я создаю вручную (введите), как в: var highlight_dates = ['10 -9-2019 ',' 16-5-2019 'и т. Д.]; Все даты, которые соответствуют датам в массиве, меняют свой цвет фона в DatePicker - но когда я использую JSON для получения дат программным образом (из внешнего каталога), ни одна из дат DatePicker не меняет цвет.

Как я получаю даты из внешнего каталога

Я использую следующий код, чтобы получить даты из каталога (вызывая код perl, как в L4):

1.  function getResults() {
2.  $.ajax({
3.  type: 'POST',
4.  url: 'getResultsFilenames5.pl', 
5.  success: function(res) {
6.  //alert("reached L37  and JSON data is : " + res.result);
7.  //localStorage.setItem('dateArray', JSON.stringify(res.result));
8.  localStorage.setItem('dateArray', res.result);
9.  var resultDates = localStorage.getItem('dateArray')
10. //var resultDates = JSON.parse(localStorage.getItem('dateArray'));
11. },
12. error: function() {alert("something didn't work!!");
13. }
14. });
15. }

Результаты помещаются в localStorage (L8), чтобы их можно было извлечь при необходимости.

Результаты, которые я получаю

Когда я отображаю даты (L6) - ВЫХОД ИЗ res.result - они выглядят так:

23-05-2019,07-10-2019,20-06-2019,01-06-2019,30-05-2019,29-04-2019,,25-04-2019,03-10-2019,16-05-2019,,17-06-2019   (no square brackets or apostrophes).

Однако, с добавлением квадратных скобок и апострофов в коде perl (который извлекает даты), массив дат выглядит точно так же, как ручной массив, когда я отображаю их с помощью «alert» (L 6) , так что я думаю, что проблема не в программировании, а, скорее, в несоответствии форматирования между форматом datepicker и форматом, возвращаемым JSON, или использованием localStorage.

Я пробовал используя 'stringify' (L7) и 'parse' (L10), чтобы изменить формат даты, но это не имело никакого эффекта. Я также (в отчаянии) попытался изменить вывод perl на скалярный (используя 'qq (@files')) - но опять же, без выделения даты.

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

1 Ответ

0 голосов
/ 12 января 2020

Вы должны преобразовать данные в допустимый массив, затем установить его в resultDates и затем сохранить данные в хранилище.

success: function(res) {
    var resultDates = getDataAsArray(res);
    localStorage.setItem('dateArray', resultDates);
}, 

и небольшая вспомогательная функция:

function getDataAsArray(data) {
    return data.split(",");
}
...