Получение ‘undefined’ при доступе к массиву внутри объекта в javascript

#javascript #jquery #arrays #javascript-objects

#javascript #jquery #массивы #javascript-объекты

Вопрос:

Я пытаюсь получить доступ ко времени с заданной даты.

Вот HTML

 <input type="date" name="fromdate" id="fromdate" onchange="displaytimefromdate(this.value)" />
<div id="timepicker"></div>
  

Вот код Javascript:

     var availableTime = {"2014-07-18":["Friday, 02:02:00 - 00:00:00","Friday, 01:01:00 - 01:01:00"],"2014-07-19":["Saturday, 02:02:00 - 00:00:00","Saturday, 01:01:00 - 01:01:00"],"2014-07-20":["Sunday, 02:02:00 - 00:00:00","Sunday, 01:01:00 - 01:01:00"]};

function displaytimefromdate(timefromdate) {
        jQuery('#timepicker').html('<div class="form-group"><div class="radio"><label><input class="form-control input-lg bg-darkBlue fg-white" type="radio" id="timepicker" name="timepicker" /></label>' availableTime.timefromdate '</div></div>');
}
  

Вот JsFiddle :- http://jsfiddle.net/rW73e /

Помощь была бы оценена.

Спасибо

Ответ №1:

Взгляните сюда:

http://jsfiddle.net/rW73e/2/

Я присвоил timefromdate прямое строковое значение.

Итак,

 availableTime[timefromdate];
  

работает нормально. Это не проблема.

Ваши ключи объекта date ограничены 2 или 3 значениями, которые вы включили в availableTime , которые напрямую соответствуют времени. Другие даты не отображаются.

Если вы выберете другие даты, которых нет в availableTime объекте, он обязательно вернется undefined .

Ответ №2:

С использованием обозначения в скобках это работает, однако объект, к которому вы пытаетесь получить доступ, определен как array.

 var availableTime = {"2014-07-18":["Friday, 02:02:00 - 00:00:00","Friday, 01:01:00 - 01:01:00"],"2014-07-19":["Saturday, 02:02:00 - 00:00:00","Saturday, 01:01:00 - 01:01:00"],"2014-07-20":["Sunday, 02:02:00 - 00:00:00","Sunday, 01:01:00 - 01:01:00"]};

function displaytimefromdate(timefromdate) {
    jQuery('#timepicker').html('<div class="form-group"><div class="radio"><label><input class="form-control input-lg bg-darkBlue fg-white" type="radio" id="timepicker" name="timepicker" /></label>' availableTime[timefromdate] '</div></div>');
}
  

http://jsfiddle.net/rW73e/3/

Если вы хотите использовать весь блок, вам следует изменить объект следующим образом:

 var availableTime = {"2014-07-18":["Friday, 02:02:00 - 00:00:00, Friday, 01:01:00 - 01:01:00"],"2014-07-19":["Saturday, 02:02:00 - 00:00:00, Saturday, 01:01:00 - 01:01:00"],"2014-07-20":["Sunday, 02:02:00 - 00:00:00, Sunday, 01:01:00 - 01:01:00"]};
  

http://jsfiddle.net/rW73e/4/

… или доступ к значению внутри массива:

 function displaytimefromdate(timefromdate) {
        jQuery('#timepicker').html('<div class="form-group"><div class="radio"><label><input class="form-control input-lg bg-darkBlue fg-white" type="radio" id="timepicker" name="timepicker" /></label>' availableTime[timefromdate][0] '</div></div>');
  

http://jsfiddle.net/rW73e/5/

Ответ №3:

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

Попробуйте:

 availableTime[timefromdate] 
  

вместо:

 availableTime.timefromdate
  

Надеюсь, это поможет

Комментарии:

1. — это карта, где «2014-07-18» — это ключ, а значение — массив. Если вы выберете дату, которая не существует на этой карте — вы всегда получите «Undefined». Выберите некоторую дату, которая существует в вашем appreciate