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

NegociacaoController.js:20 Uncaught TypeError: Cannot read property 'value' of undefined

Boa tarde galera, Estou lendo o livro Cangaceiro Javascript Uma Aventura No Sertao Da Programação (QUE LIVRO!!!) do Flavio Almeida, e me deparei com esse erro no final do capitulo 5. Não sei se aqui é a melhor forma de tirar essa dívidas mais segue meu git:-

https://github.com/octavioviana/Js-Es6-Livro_JsCangaceiro

Eu não estou conseguindo entender porque ele está acontecendo. Alguém pode me ajudar?

Obrigado desde já.

7 respostas

Oi Octavio! Dá só uma olhada no erro: ele diz que não consegue ler a propriedade value de um objeto indefinido (undefined) na linha 20 do NegociacaoController.

Fui olhar a linha especificada do seu repositório e reparei que é uma tentativa de acesso ao valor do atributo this._inputData. Este então está nulo, o que quer dizer que:

  • Não há um elemento com o seletor id="data" no seu HTML.
  • O médoto constructor do objeto NegociacaoController não está sendo chamado.
  • Ao chamar o método constructor, está ocorrendo um erro antes de conseguir atribuir um valor ao _inputData.

Alguma dessas coisas está acontecendo, consegue descobrir qual seria? Utilize os breakpoints do console do seu navegador se necessário =)

Ps.: a Casa do Código tem um fórum próprio mas tudo bem mandar a dúvida aqui também.

Olá, como Marcos orientou, o ideal é você posta no fórum da casa do código. Lá me ajuda a detectar quem comprou o livro ou quem pirateou, porque só quem tem livro da casa do código tem acesso ao fórum de lá. Tudo bem?

Bom, não custa eu lembrar que ao final de cada capítulo há um link com o gabarito no github para que você possa comparar seu código.

Todavia, eu baixei seu projeto e testei. Tudo funcionou como esperado, não aconteceu o erro que você relatou. Das duas uma, ou você não salvou sua última alteração quando foi realizar o teste ou o seu repositório do git não reflete o código do seu teste.

Como já demos início aqui ao bate papo, vamos resolver aqui, depois a gente combina de postar lá no fórum. Fique tranquilo, não há erratas no livro e tenho vários leitores que já terminaram o manuscrito sem problema algum.

Aguardo informações.

Ah, espera, há um problema sim. Quando eu tento cadastrar a segunda negociação o problema acontece. Vou verificar...espera aí...

solução!

Achei problema, esta aqui:

  _limpaFormulario() {
    this._inputData.value = '';
    this._inputQuantidade.value = 1;
    this._inputValor.value = 0.0;
    this._inputData = focus();
  }

Depois que gravamos, limpamos o formulário. Na hora de limpar, você esta fazendo:

    this._inputData = focus();

Com isso, você esta fazendo a mesma coisa que this._inputData = windows.focus(). Esta atribuindo a função focus() de windows.

O correto é

    this._inputData.focus();

Da maneira que estava, você esta destruindo a referência do this._inputData, por isso no segundo cadastro não conseguia mais acessar o valor do elemento.

Sucesso e bom estudo meu aluno!

Então, no caso ele cadastrar uma negociação, e até imprime no console.log, tudo certo. Mas quando eu vou fazer outra negociação, ou seja, coloca-la juntamente com a negociação que fiz passada dentro do array, eu acho que é isso que ele não está conseguindo fazer, pois estou seguindo o livro certinho, não sei o motivo do erro ainda.

Oi Octavio. Como demonstrei, você fez diferente do que esta no livro. Erros como esse acontecem, mesmo quando olhamos, olhamos, olhamos e não enxergamos nosso erro. Por isso que há ao gabarito no final de cada capítulo, para ajudar o leitor ver onde errou sem que ele precise gastar tempo nos fóruns. Só não esqueça de marcar o poste como solucionado.

Sucesso e bom estudo meu aluno!

Boa tarde Flavio, já corrigi o meu erro, de falta de atenção rs... Obrigado pela orientação e pelo seu tempo.

Obrigado pelo livro, estou gostando muito! Não me arrependo nem um pouco de ter comprado.

Mais uma vez muito obrigado pelo seu tempo. E em outras duvidas postarei lá. Boa semana!!