@kikosko

Почему в значениях инпута нету данных объекта?

При клике на <i class="far fa-edit" data-id="edit"> (я хочу редактировать контакт в модальном окне) не видны данные созданного контакта в значениях инпута и я получаю ошибу: "Uncaught TypeError: Cannot read property 'fname' of undefined". Помогите пожалуйста исправить
//  create table
    load() {
        let tBody = document.querySelector('tbody');

        tBody.innerHTML = '';

        for (let i = 0; i < this.items.length; i++) {
            let tr = document.createElement('tr');
            tr.innerHTML = `<tr class="data">
                                <th scope="row" class="checkBox"><input type="checkbox" class="form-check-input" bid ="${i}"></th>
                                <td>${this.items[i].fname}</td>
                                <td>${this.items[i].phone}</td>
                                <td>${this.items[i].email}</td>
                                <td ><i class="far fa-edit" data-id="edit"></i> | <i class="far fa-trash-alt"  data-id="rubbish"></i></td>
                            </tr>`;
            tBody.append(tr);
        }
// show data of choosen contact in modal 
    fullView(elem) {
        const d = document;
        const i = elem;
            d.querySelector('#Edname').value = this.items[i].fname;
            d.querySelector('#Edphone').value = this.items[i].phone;
            d.querySelector('#Edemail').value = this.items[i].email;
    }

d.addEventListener('click', (e) => {
    let elem = e.target.dataset.id;
    if (elem == "edit") {
        app.UserBook.fullView(elem);
        editModal.style.display = "block";
    }
}, false);
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
if (elem == "edit") {
    app.UserBook.fullView(elem);

Понятно, elem - это строка.

fullView(elem) {
    const d = document;
    const i = elem;
    d.querySelector('#Edname').value = this.items[i].fname;

И используя эту строку как ключ, вы пытаетесь что-то достать из this.items.

Из тех самых items, которые вроде бы массив:

for (let i = 0; i < this.items.length; i++) {


Как-то странно получается, не находите?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
rockon404
@rockon404
Frontend Developer
Вы передаете в вызов fullView(elem) аргументом elem либо строку 'edit', либо строку 'rubbish'.
Естественно в вашем массиве нет таких элементов, поэтому вы и получаете ошибки при попытке обращения к их свойствам:
this.items.edit.fname;  // Uncaught TypeError: Cannot read property 'fname' of undefined
this.items.rubbish.fname;  // Uncaught TypeError: Cannot read property 'fname' of undefined
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы