Segue o código com minhas modifica??es:
Espero que seja útil!
jQuery(document).ready(function ($) {
// Variável para controlar se o campo de CEP já recebeu foco
var firstFocus = true;
// Fun??o para preencher automaticamente o endere?o com base no CEP
function autocompleteAddressByCEP(cep, prefix) {
// Mostra o ícone de carregamento
$(
#${prefix}_postcode_field
).block({
message: null,
overlayCSS: {
background: '#fff',
opacity: 0.6
}
});
// URL da API Viacep
const url = https://viacep.com.br/ws/${cep}/json/
;
$.ajax({
url: url,
method: 'GET',
dataType: 'json',
success: function (data) {
if (!data.erro) {
// Preenche os campos de endere?o com os dados obtidos da API
$(#${prefix}_state
).val(data.uf).change();
setTimeout(function () {
$(#${prefix}_state
).trigger('chosen:updated');
}, 100);
$(#${prefix}_city
).val(data.localidade);
$(#${prefix}_neighborhood
).val(data.bairro);
$(#${prefix}_address_1
).val(data.logradouro);
} else {
console.error('CEP n?o encontrado');
}
},
error: function (jqXHR, textStatus, errorThrown) {
console.error('Erro ao obter dados da API:', textStatus, errorThrown);
},
complete: function () {
// Esconde o ícone de carregamento
$(#${prefix}_postcode_field
).unblock();
}
});
}
// Evento de foco no campo de CEP
$('form.checkout').on('focus', '#billing_postcode, #shipping_postcode', function () {
var prefix = this.id.split('_')[0];
var cep = $(this).val().replace(/\D/g, ''); // Remover n?o dígitos do CEP
if (firstFocus) {
autocompleteAddressByCEP(cep, prefix);
firstFocus = false; // Altera o valor do flag após o primeiro foco
}
});
// Evento de foco no campo de logradouro (address_1)
$('form.checkout').on('focus', '#billing_address_1, #shipping_address_1', function () {
var prefix = this.id.split('_')[0];
var addressField = $(this);
// Verifica se o campo de logradouro está vazio antes de preencher
if (!addressField.val().trim()) {
var cepField = $(#${prefix}_postcode
);
var cep = cepField.val().replace(/\D/g, ''); // Remover n?o dígitos do CEP
autocompleteAddressByCEP(cep, prefix);
}
});
// Evento de mudan?a no campo de CEP
$('form.checkout').on('input', '#billing_postcode, #shipping_postcode', function () {
var prefix = this.id.split('_')[0];
var cep = $(this).val().replace(/\D/g, ''); // Remover n?o dígitos do CEP
if (cep.length === 8) {
autocompleteAddressByCEP(cep, prefix);
}
});
});