Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему возникает ошибка с toggle? (https://javascript.ru/forum/misc/85850-pochemu-voznikaet-oshibka-s-toggle.html)

borus 16.04.2024 17:50

Почему возникает ошибка с toggle?
 
Вложений: 1
Здравствуйте!
Делаю учебное задание(приложил архив).
При клике на любую карточку, отрисовываемую в index.html, в консоли возникает ошибка при вызове метода toggle, хотя видно, что переменная card, к которой применяется .classList.toggle() - это dom-объект(см. картинки в архиве)

Кто может сказать, почему?

Aetae 16.04.2024 21:29

У тебя в аргументом card в функцию приходит не dom элемент li, а инстанс класса Card у которого есть свойство card в котором лежит dom элемент li, о чём тебе консоль и говорит.
Т.е. не card.classList.toggle( ... ) а card.card.classList.toggle( ... ). (Или использовать деструктуризацию на входе, если остальное из инстанса Card не нужно: function({card}){ card.classList.toggle( ... ) })

voraa 16.04.2024 21:30

let card = new Card(ul, arr[i], function(card){
              // Здесь можно прописать логику игры.
              card.classList.toggle('hidden');

card - объект, созданный конструктором Card. Это не элемент html. Элемент внутри, в свойстве card.
Надо
card.card.classList.toggle('hidden');

borus 17.04.2024 21:52

Здравствуйте!
Спасибо.
Получается тот card, который стоит после let передается сразу же в function()?

Aetae 18.04.2024 00:03

Тот или не тот - неизвестно*, из фактов только то, что в callback приходит инстанс класса Card. Глядя на код никак нельзя гарантировать, что он тот же самый. Но если следовать логике, то скорее всего тот же.

Сразу или не сразу - неизвестно*, из фактов только то, что callback когда-то таки вызывается. Глядя на код никак нельзя определить время вызова. Но если следовать логике, то раз существует callback - он вызывается скорее всего не сразу, а потом, после выполнения какого-то внутреннего асинхронного действия.

* Если код самописный - надо смотреть по коду, если нет - в документации.


Часовой пояс GMT +3, время: 06:41.