Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Prezados,
Nunca entendi essa coisa do js colocar funções em variáveis e da chamada de funções dentro de outras funções. Preciso chamar uma função dentro de outra mas não está funcionando. Acredito que tenho que fazer algo para validar o escopo, talvez colocando a função em uma var. JS é um negócio show de bola, mas alguém poderia me indicar um tuto ou uma referência que me faça entender de vez esse conceito no js que é tão diferente de outras linguagens.
Eis o script danadinho:
document.addEventListener("DOMContentLoaded", function(event) {
//Funcao criar novo campo
function criarCampo(){
var inputHorario = document.getElementById('inputHorario');
var qteImputsHorarios = document.getElementById('campos-horario').getElementsByTagName('input')
qteImputsHorarios = qteImputsHorarios.length
inputHorario.id = "imputHorario"+(parseFloat(qteImputsHorarios)+1);
document.getElementById('campos-horario').appendChild(inputHorario);
}
//evento criar novo campo
var botaoAdicionarHorario = document.getElementById('adicionar-horario');
botaoAdicionarHorario.addEventListener("click", function(){criarCampo()}, false);
});
Na penultima linha simplesmente ele não reconhece a chamada da função.
Obrigado,
Olá William, mais uma vez obrigado por suas ótimas respostas. Resolveu a chamada da função. Estou quebrando cabeça agora com o funcionamento da própria função, mas aí acho que é do básico do js mesmo que estou errando algo.
Eu quis dizer que a parte [ function(){criarCampo()} ] do script não funfa e não retorna nada no console, eu já sabia que o que tinha escrito estava errado mas queria entender melhor.
Como eu uso mac o atalho comand+shift+j vai pra pagina de downloads do chrome. Esse atalho no windows seria para o console do element inspect???
Print do que retorna no console quando clico no botão:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.danielrodrigues.net.br/deletar/captura.jpg&key=2862b4603e7ff59af7042cbc1f2257d1a21112253fb5c36f96eb6f3606566698" alt="captura.jpg" />
Obrigado,
No Chrome do MAC é Command + Option + J
se esse cara aqui:
var inputHorario = document.getElementById('inputHorario');não existe e vc quer criar ele, vc precisa fazer o seguinte:
var inputHorario = document.createElement('input');Na verdade eu to fazendo uma coisa que não sei se é "lícita". Eu to pegando um elemento que existe no html, tem id próprio, to armazenando ele em uma variável, depois mudo o id do elemento na variável e aí uso appendChild pra incluir ele logo após do elemento inicial. A principio parece gambiarra, mas não achei outra estratégia, se alguém puder sugerir.
Obrigado,
Opa, resolvido o segundo problema com esse conceito:
https://developer.mozilla.org/pt-PT/docs/DOM/element.cloneNode
Obrigadíssimo,
isso aqui:
botaoAdicionarHorario.addEventListener("click", function(){criarCampo()}, false);
é o mesmo que fazer:
botaoAdicionarHorario.addEventListener("click", criarCampo, false);
não entendi oque vc quis dizer com: "não reconhece a chamada da função".
Aperte Ctrl + Shift + J no teu Firefox ou Chrome, e diga oque aparece.