rafaelstz
4/11/2019 - 2:44 AM

Autocompletar CEP

jQuery(function($){

    //////////////////////////////////////////////////////
    function limpa_formulário_cep() {
        // Limpa valores do formulário de cep.
        $("#billing\\:street1").val("");
        $("#billing\\:city").val("");
        $("#billing\\:region_id").val("");
    }

    $("#billing\\:region_id option[value='485']").attr("data-sigla", "AC");
    $("#billing\\:region_id option[value='486']").attr("data-sigla", "AL");
    $("#billing\\:region_id option[value='487']").attr("data-sigla", "AP");
    $("#billing\\:region_id option[value='488']").attr("data-sigla", "AM");
    $("#billing\\:region_id option[value='489']").attr("data-sigla", "BA");
    $("#billing\\:region_id option[value='490']").attr("data-sigla", "CE");
    $("#billing\\:region_id option[value='511']").attr("data-sigla", "DF");
    $("#billing\\:region_id option[value='491']").attr("data-sigla", "ES");
    $("#billing\\:region_id option[value='492']").attr("data-sigla", "GO");
    $("#billing\\:region_id option[value='493']").attr("data-sigla", "MA");
    $("#billing\\:region_id option[value='495']").attr("data-sigla", "MS");
    $("#billing\\:region_id option[value='494']").attr("data-sigla", "MT");
    $("#billing\\:region_id option[value='496']").attr("data-sigla", "MG");
    $("#billing\\:region_id option[value='499']").attr("data-sigla", "PR");
    $("#billing\\:region_id option[value='498']").attr("data-sigla", "PB");
    $("#billing\\:region_id option[value='497']").attr("data-sigla", "PA");
    $("#billing\\:region_id option[value='500']").attr("data-sigla", "PE");
    $("#billing\\:region_id option[value='501']").attr("data-sigla", "PI");    
    $("#billing\\:region_id option[value='502']").attr("data-sigla", "RJ");
    $("#billing\\:region_id option[value='503']").attr("data-sigla", "RN");
    $("#billing\\:region_id option[value='504']").attr("data-sigla", "RS");  
    $("#billing\\:region_id option[value='505']").attr("data-sigla", "RO");        
    $("#billing\\:region_id option[value='506']").attr("data-sigla", "RR");
    $("#billing\\:region_id option[value='507']").attr("data-sigla", "SC");
    $("#billing\\:region_id option[value='509']").attr("data-sigla", "SE");
    $("#billing\\:region_id option[value='508']").attr("data-sigla", "SP");
    $("#billing\\:region_id option[value='510']").attr("data-sigla", "TO"); 

    //Quando o campo cep perde o foco.
    $("#billing\\:postcode").blur(function() {

        //Nova variável "cep" somente com dígitos.
        var cep = $(this).val().replace(/\D/g, '');

        //Verifica se campo cep possui valor informado.
        if (cep != "") {

            //Expressão regular para validar o CEP.
            var validacep = /^[0-9]{8}$/;

            //Valida o formato do CEP.
            if(validacep.test(cep)) {

                //Preenche os campos com "..." enquanto consulta webservice.
                $("#billing\\:street1").val("...")
                $("#billing\\:city").val("...")
                $("#billing\\:region_id").val("...")

                //Consulta o webservice viacep.com.br/
                $.getJSON("//viacep.com.br/ws/"+ cep +"/json/?callback=?", function(dados) {

                    if (!("erro" in dados)) {
                        //Atualiza os campos com os valores da consulta.
                        $("#billing\\:street1").val(dados.logradouro);
                        $("#billing\\:city").val(dados.localidade);
                        $('#billing\\:region_id option').each(function() {
                            $(this).attr('selected', this.dataset.sigla == dados.uf);
                        });

                    } //end if.
                    else {
                        //CEP pesquisado não foi encontrado.
                        limpa_formulário_cep();
                        alert("CEP não encontrado.");
                    }
                });
            } //end if.
            else {
                //cep é inválido.
                limpa_formulário_cep();
                alert("Formato de CEP inválido.");
            }
        } //end if.
        else {
            //cep sem valor, limpa formulário.
            limpa_formulário_cep();
        }
    });
    //////////////////////////////////////////////////////
});