Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

ID NULL ao adicionar itens

Até então estava dando certo adicionar os IDs aos novos itens, porém quando fui utilizar o operador ternário, começou a apresentar o ID como null, com exceção do primeiro elemento adicionado na lista.

Abaixo o código:

let form = document.querySelector('#novoItem');

let lista = document.querySelector('.lista');

let itens = JSON.parse(localStorage.getItem('itens')) || [];

// loop para criar elementos no array

itens.forEach ((elemento)=>{

    criaElemento(elemento);
    })

//execução de ações após o botão submit ser clicado


form.addEventListener ('submit', (evento)=>{

evento.preventDefault();
let nome = evento.target.elements['nome'].value;
let quantidade = evento.target.elements['quantidade'].value;

let existe = itens.find(element=> element.nome === nome);

let itemAtual = {
    'nome': nome,
    'quantidade': quantidade
}

if (existe){
    itemAtual.id = existe.id
    atualizaElemento(itemAtual)
    itens [ itens.findIndex(element=>element.id === item.id)] = itemAtual;
}else{
    itemAtual.id = itens[itens.length-1]? [itens.length-1].id + 1 : 0;
    criaElemento(itemAtual);
    itens.push(itemAtual);

}

// insere o objeto no array itens e posteriormente o salva no localstorage
localStorage.setItem('itens', JSON.stringify(itens));
form.reset();
});

// criar elemento na lista

function criaElemento (item){

let newItem = document.createElement('li');
newItem.classList.add('item')
let numberItem = document.createElement('strong');
numberItem.innerHTML = item.quantidade;
numberItem.dataset.id = item.id;
newItem.appendChild(numberItem);
newItem.innerHTML+=item.nome;
newItem.appendChild(buttonErase(item.id));

lista.appendChild(newItem);


}

// atualiza elemento

function atualizaElemento (item) {

document.querySelector("[data-id='"+item.id+"']").innerHTML= item.quantidade;

}

//cria botão para excluir

function buttonErase (id){

let button = document.createElement('button');
button.innerHTML = 'X';
button.addEventListener('click',function (){
    eraseItem(this.parentNode,id)
})
return button;

}

//exclui elementos

function eraseItem (tag, id){

tag.remove();

itens.splice(itens.findIndex(element=>element.id === id),1);
localStorage.setItem('itens',JSON.stringify(itens))
}
2 respostas
solução!

Olá Matheus! Tudo bem?

Pelo código que você compartilhou, parece que o problema está no trecho onde você define o ID para o novo item. Você está utilizando um operador ternário para verificar se existe algum item na lista e, caso exista, pegar o ID desse item e adicionar 1. Caso contrário, você define o ID como 0.

No entanto, acredito que há um erro de sintaxe nessa linha de código:

itemAtual.id = itens[itens.length-1]? [itens.length-1].id + 1 : 0;

O correto seria:

itemAtual.id = itens[itens.length-1]? itens[itens.length-1].id + 1 : 0;

Aqui, o código está verificando se o último elemento de itens existe, verificando se não é nulo ou indefinido. Se o último elemento existe, o código define o ID do item atual como o ID do último elemento mais 1, retirando o valor null.

Espero ter ajudado, qualquer dúvida, me coloco à disposição! Bons estudos!

Sucesso

Um grande abraço e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Muito obrigado, meu amigo! O erro era exatamente este.