Pessoal, Tudo bem?
Estou enfrentando um problema com foco em campo usando JavaScript e não estou conseguindo resolver.
Tenho uma mensagem exibida ao usuário com um botão CORRIJA AGORA. A ideia é que somente após o usuário clicar no botão da mensagem, o foco seja direcionado para um campo específico do formulário.
Porém, o comportamento atual está assim:
- O foco já vai para o campo antes da ação do usuário
- Quando o usuário clica no botão da mensagem, o campo perde o foco
- Ou seja, o foco acontece no momento errado
O comportamento esperado é:
- O foco NÃO ocorrer automaticamente
- O foco só deve ir para o campo após o clique no botão da mensagem
Já tentei ajustar a ordem do código, usar eventos de clique e controle de foco, mas sem sucesso. Sempre que a mensagem aparece, o foco acaba indo antes para o campo.
Segue abaixo o código que estou utilizando para referência:
Evento onValidate
// 1. Variáveis de Controle
$msg = “”;
$campo_foco = “”;
// 2. Validação
if (trim({PRO_CODIGO}) == “”) {
$msg = “A Descrição do Produto é obrigatória.”;
$campo_foco = “PRO_CODIGO”;
}
elseif (trim({PRO_QUANTIDADE}) == “” || {PRO_QUANTIDADE} <= 0) {
$msg = “Informe uma Quantidade válida.”;
$campo_foco = “PRO_QUANTIDADE”;
}
elseif (trim({PRO_VENDA}) == “” || {PRO_VENDA} <= 0) {
$msg = “O Valor de Venda deve ser maior que zero.”;
$campo_foco = “PRO_VENDA”;
}
elseif (trim({IOR_TOTAL}) == “” || {IOR_TOTAL} <= 0) {
$msg = “O Total informado é inválido.”;
$campo_foco = “IOR_TOTAL”;
}
// 3. Exibição com Botão Personalizado e Foco Forçado
if ($msg != “”) {
$params = array(
'title' => "Verifique os Dados",
'type' => "error",
'confirmButtonText' => "CORRIJA AGORA", // Texto que você pediu
);
// Dispara o alerta visual
sc_alert($msg, $params);
// Injeta o foco via JavaScript (Executa após o clique no botão)
sc_ajax_javascript('nm_set_focus', array($campo_foco));
// Bloqueia a gravação no banco de dados
sc_error_message(" ");
sc_error_exit();
}