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

Por que assim não funciona?

Estava tentando reduzir um pouco o código da aula 1 mas estou enfrentando um probleminha.

Esse código aqui está funcional, criei uma função deletarPaciente para não chamar uma função anônima e ficar mais claro

var pacientes = document.querySelectorAll(".paciente");


pacientes.forEach(function(paciente){
    paciente.addEventListener("dblclick",deletarPaciente);
})


function deletarPaciente(){
    this.remove();
}

Esse de cima, está ok.. Mas eu queria criar uma outra função para chamar outra caso ocorra um duplo clique para diminuir um pouco ali dentro do forEach

Fiz isso:

function ouvirDuploClique(termo,funcao){
    termo.addEventListener("dblclick",funcao);
}

Reescrevi o código assim

var pacientes = document.querySelectorAll(".paciente");


function deletarPaciente(){
    this.remove();
}


function ouvirDuploClique(termo,funcao){
    termo.addEventListener("dblclick",funcao);
}

pacientes.forEach(ouvirDuploClique(paciente,deletarPaciente));

Com essa configuração, eu recebo o seguinte erro: remover-paciente.js:21 Uncaught ReferenceError: paciente is not defined

Vocês entenderam o que eu tô tentando fazer? Onde eu tô errando?

5 respostas

Matheus, coloque o código inteiro junto pra gente ver? O remover-paciente.js em especial, que é o que dá erro.

A versão que dá erro é essa:

var pacientes = document.querySelectorAll(".paciente");


function deletarPaciente(){
    this.remove();
}


function ouvirDuploClique(termo,funcao){
    termo.addEventListener("dblclick",funcao);
}

pacientes.forEach(ouvirDuploClique(paciente,deletarPaciente));

E a versão que roda normal é essa:

var pacientes = document.querySelectorAll(".paciente");


pacientes.forEach(function(paciente){
    paciente.addEventListener("dblclick",deletarPaciente);
})


function deletarPaciente(){
    this.remove();
}

Matheus,

no código que funciona, 'paciente' é um parâmetro, que é repassado para dentro da função anônima, para ser processado.

pacientes.forEach(function(paciente){
    paciente.addEventListener("dblclick",deletarPaciente);

E no código que não funciona, 'paciente' é uma variável, que vai ser encaminhada à function ouvirDuploClique. Quando chegar à ouvirDuploClique será tratada como parâmetro 'termo'. Nesse caso, talvez o console esteja informando que a variável 'paciente' não foi definida.

pacientes.forEach(ouvirDuploClique(paciente,deletarPaciente));

Será que é isso?

solução!

Sim!!

Alterei a linha do forEach e foi

pacientes.forEach(function(paciente){
    ouvirDuploClique(paciente,deletarPaciente)
})

Sempre que eu uso o .forEach ele tem que ir acompanhado de uma função anônima? Não posso colocar pra chamar uma função já existente de cara como eu tava fazendo, né?

Matheus,

não encontrei nenhuma referência a esta sintaxe que você utilizou mesmo.