Olá senhores, sou leigo em jquery e ajax, comecei a aprender js recentemente para desenvolver um site, e estou bem perdido com uma função de preenchimento automático de endereços que é feita em ajax e jquery. Ela funciona quando o usuário digita o cep e muda de campo, preenchendo a rua, estado, cidade, etc, automaticamente.
Meu formulário é um contrato,com um ou mais administradores, (que são adicionados conforme o usuário solicita), e cada administrador tem um endereço diferente, o problema está em usar a função cep quando crio novos adm, porque ela funciona somente com campos fixos determinados manualmente dentro da função.
Em JS eu precisei de uma função que somava os campos conforme eram adicionados, e resolvi buscando os campos por um getElementByTagName, e então manipulo os id’s, etc, mas em jquery e ajax não sei nem por onde começar, se alguém puder dar uma luz, agradeço muito. Segue o código no git pra quem se interessar.
Esse código cria um form com endereço, e adiciona mais endereços conforme solicitado.
se executar o código e prencher com um cep, vai ver como funciona.
MAS, se você acrescentar mais um endereço no botão “adicionar endereço”, e prencher o cep, não funciona.
e é isso que preciso, modificar a função pra ela continuar prenchendo os inputs novos que são criados pela função addEnd();
o que eu estou tentando fazer, (e que já fiz em uma função JS que vai somando os campos conforme são adicionados), abaixo explico nos comentários
//modificar a função pra ela funcionar com o onchange="cep(name)", assim escrevo diretamente no input e invoco ela
//passar uma variavel nome ( atributo name do input )
function cep(nome) {
//pego todos os inputs do html com o atributo name = nome que passei
var vetor = document.getElementByTagName("nome");
$.ajax({
//o $(this).val() precisa enviar cep que está no vetor: vetor[0].id
url: 'https://viacep.com.br/ws/' + $(this).val() + '/json/unicode/',
dataType: 'json',.
//na function eu passo o cep que está na posição 0
success: function(vetor[0].id) {
//aqui eu passo o valor do id de cada input que eu quero que a função preencha
//eu sei onde está cada elemento no vetor porque o getElement me trás na ordem os inputs
$("vetor[0].id").val(resposta.cep);
$("#vetor[2].id").val(resposta.logradouro);
$("#vetor[3].id").val(resposta.complemento);
$("#vetor[4].id").val(resposta.bairro);
$("#vetor[5].id").val(resposta.localidade);
$("#vetor[6].id").val(resposta.uf);
$("#vetor[7].id").focus();
}
});
});
´´´
Enfim, é isso, espero ter conseguido explicar melhor haha
Issoo,
eu consigo fazer na função addEnd(), dentro do innerHTML, utilizando a variável qtdeCamposEnd, assim todo conjunto de campos que eu criar, o id das input vão vir incrementados, fica assim:
O legal que ele faz o papel que precisa de uma maneira lógica e atraente, sem tem que escrever muito código e a sua manutenção melhora consequentemente
Cara, aceito sim, ficou exatamente como preciso haha,
Mas… como uso um código feito em angular? tem que importar alguma biblio?
Porque até agora usei HTML + JS apenas.
Não sei nem como imprime um “hello word” em angular haha
Eu tentei só colar o código no arquivo html e colocar os scripts etc, mas não foi.