Evento LostFocus só dispara quando o valor do campo é modificado

Boa tarde!

Coloque uma validação em um campo numérico, mas percebi que não estava entrando nesta validação.
O campo sempre vem populado por é o próximo código a ser digitado.

Percebi que pelo fato do campo estar populado faz com que não entre na validação, segue exemplo abaixo:

Campo item já vem populado na tela ao abrir o formulário, a validação está no lostfocus. Ao passar o campo não da a mensagem de teste que coloquei no lostfocus.

Campo já vindo populado:
image

Quando o foca sai do campo não entra na mensagem de teste:
image

Se eu apagar o conteúdo do campo item e der TAB, entra na mensagem:
image

Se eu preencher novamente o campo também da a mensagem de teste ao sair o foco, mas se voltar novamente pra ele não da mais a mensagem a não ser que o conteúdo do campo seja diferente do conteúdo anterior:

image

Att,
Nielson Santos

Obs: Fiz testes com campo texto também e da o mesmo problema.

Olá @nielson.santos.

Na verdade, o sistema está correto.

O evento LostFocus não é “puramente” o que o seu nome representa.
Ele é disparado quando o campo perde o foco, mas só se o valor foi modificado. Se o usuário apenas passar pelo campo sem modificar o valor, o evento não dispara.

Como o processamento dos eventos é realizado no Servidor, este tratamento existe para melhorar a Performance, evitando que a comunicação Cliente x Servidor ocorra de forma excessiva.

Você vai precisar usar uma outra abordagem para mostrar a mensagem.

Nativamente existe alguma forma de fazer esta validação no sistema mesmo se não houver alteração no valor do campo?

Você pode usar um código JavaScript para forçar o evento LostFocus.

Siga os passos abaixo:

  1. Adicione um arquivo JavaScript no Formulário.
    image
  2. Adicione o código abaixo no arquivo JavaScript, substituindo “txt1” pelo nome do campo que você deseja forçar o evento LostFocus.
    // Use o Namespace de sua preferência
    var latromi = latromi || {};
    
    latromi.myForm = function () {
    
       function _onFormCreated(context) {
          // Configura "LostFocus" do campo chamado "txt1"
          _configureForcedLostFocus(context, 'txt1');
       }
       
       function _configureForcedLostFocus(context, fieldName) {
          // Procura as configurações do campo, para encontrar o ID do elemento
          var fieldInfo = context.form.getFieldData(fieldName);
          if (fieldInfo) {
             var fieldControl = $find(fieldInfo.clientId);
             if (fieldControl) {
                fieldControl.add_focus(function(sender, eventArgs) {
                   sender.get_element().setAttribute('data-oldValue', '\0');
                });
             }
          }
       }
    
       return {
          onFormCreated		: _onFormCreated,
          onEventFiring		: function(arguments) { }, // Evento não manipulado
          onFieldValueChanged : function(arguments) { }  // Evento não manipulado
       }
    };
    
    // Declara o formulário
    var myForm = new latromi.myForm();
    
    // Adiciona Callbacks no Formulário
    latromi.formManager.setOnFormCreatedCallback( myForm.onFormCreated );
    latromi.formManager.setOnEventFiringCallback( myForm.onEventFiring );
    latromi.formManager.setOnFieldValueChangedCallback( myForm.onFieldValueChanged );
    
  3. Salve o arquivo JavaScript e em seguida salve o Formulário.