Uncaught TypeError: Невозможно установить свойство 'id' из неопределенного - PullRequest
0 голосов
/ 23 мая 2019

У меня проблема с моим кодом здесь. Я не знаю, почему я получаю сообщение об ошибке при определении идентификатора для значения массива:

Uncaught TypeError: Cannot set property 'id' of undefined
    at script.js:56 

Заранее благодарю за помощь.

Я пытался найти ответ в Интернете, но ничего полезного не нашел.

// Create variables, including grabbing the list, page div, and a variable restricting how many students per page
const page = document.querySelector('div.page');
const studentList = document.getElementsByClassName('student-item cf');
const numberRestriction = 10;
const paginationDiv = document.createElement('div');
const paginationUl = document.createElement('ul');
paginationUl.className = 'pagination';

// Generate n number of pages correlating to the amount of students on the list / 10 
let j = 0;
if (studentList.length % numberRestriction === 0) {
   for (let i = 1; i <= (Math.round(studentList.length/numberRestriction)); i++) {
      const li = document.createElement('li');
      const a = document.createElement('a');
      a.setAttribute("href", "#" + i);
      a.textContent=i;
      li.appendChild(a);
      paginationUl.appendChild(li);
      j = j + 10;
      let k = j - 10;
      while (k < j) {
         studentList[k].id = "#" + i; // where the error occurs
         k++; 
      }
   }
} else {
   for (let i = 1; i <= (Math.round(studentList.length/numberRestriction)+1); i++) {
      const li = document.createElement('li');
      const a = document.createElement('a');
      a.setAttribute("href", "#" + i);
      a.textContent=i;
      li.appendChild(a);
      paginationUl.appendChild(li);
      j = j + 10;
      let k = j - 10;
      while (k < j) {
         studentList[k].id = "#" + i; // where the error occurs
         k++; 
      }
   }
}
paginationDiv.appendChild(paginationUl);
page.appendChild(paginationDiv);

Ответы [ 3 ]

0 голосов
/ 23 мая 2019

Это, вероятно, означает, что в вашем studentList нет такого количества элементов (элементов j-1), поэтому studentList[k] не определено, когда вы превышаете предел его фактического размера.

0 голосов
/ 23 мая 2019

Мне удалось найти решение, спасибо. Я повторю то, что Ян написал здесь:

"Мое первое предположение состоит в том, что вы пытаетесь получить доступ к массиву за его пределами. Проверьте, меньше ли k, чем длина массива, если оно больше, чем ваш расчет для kis, и вы получили неопределенное значение, возвращаемое из studentList [ k] "- янв

Вместо (k

0 голосов
/ 23 мая 2019
Uncaught TypeError: Cannot set property 'id' of undefined
    at script.js:56 

Это просто означает, что вы пытаетесь изменить свойство объекта, который не существует.

Давайте рассмотрим фрагмент кода, вызывающий эту ошибку:

  while (k < j) {
     studentList[k].id = "#" + i; // where the error occurs
     k++; 
  }

studentList - это коллекция элементов html с длиной n.Внутри этого цикла while вы либо превышаете (> n), либо задерживаете (<0) длину, таким образом, он пытается установить id объекта, который не существует. </p>

Для дальнейшей отладки введите console.log ("length:" + studentList.length); прямо перед этим циклом while и еще один console.log ("current element:" + k); внутри, чтобы увидеть, что происходит.

 console.log("length: "+studentList.length);
 while (k < j) {
   console.log("current element: "+k);
   studentList[k].id = "#" + i; // where the error occurs
   k++;
 }
...