none
Validar campo hora após saída RRS feed

  • Pergunta

  • Olá pessoal,

    Estou tentando validar uma hora digitada pelo usuário usando a função abaixo:

    Code Snippet

    //VALIDAR HORA:
    //USA-SE ASSIM: OnKeyUp="Mascara_Hora(this.value, this)"

    function Mascara_Hora(Hora, campo){
    var hora01 = '';

    hora01 = hora01 + Hora;
    if (hora01.length == 2){
    hora01 = hora01 + ':';
    campo.value = hora01;
    }
    if (hora01.length == 5){
    Verifica_Hora(campo);
    }
    }

    function Verifica_Hora(campo){
    hrs = (campo.value.substring(0,2));
    min = (campo.value.substring(3,5));
    estado = "";
    if ((hrs < 00 ) || (hrs > 23) || ( min < 00) ||( min > 59)){
    estado = "errada";
    }

    if (campo.value == "string") {
    estado = "errada";
    }
    if (estado == "errada") {
    alert("Hora invalida!");
    //campo.focus();
    }
    }


    Só q estou com dois problemas:

    1º) Se eu digitar apenas 08: esta função aceita;
    2º) Preciso validar esta data tb após sair do campo (OnBlur="Verifica_Hora(this)") para evitar o primeiro problema, mas tb não está dando certo.

    Como faço para tratar esse erro?

    Grato,

    Ilano.
    quarta-feira, 23 de julho de 2008 14:30

Respostas

  • Ilano, agora entendi qual sua real necessidade.

    Voce utilizar a funçao que nosso amigo postou, só ajustando em alguns detalhes, segue abaixo:]

     

    function Verifica_Hora(campo)
    {
     var vCampo = campo.value;
     if (vCampo.length == 5 && vCampo.substring(2,3) == ":" )
     {
      var retorno = false;
      var Hora = parseInt(vCampo.substring(0,2));
      var Minuto = parseInt(vCampo.substring(3,5));
      retorno = ((Hora >=0 && Hora <=23) && (Minuto >=0 && Minuto <=59) ) ;
      if (!retorno)
      {
       alert("Hora inválida");
       campo.value = "";
      }
     }
     else
     {
      alert("Hora inválida");
      campo.value = "";
     }
    }

     

    Para utilizar a funçao, no seu campo de que se digita a hora coloca:

     

    <input type="text" value="15:25" id="txt1" onblur="Verifica_Hora(this);" />

     

    Abraços

     

    Estevam

    quinta-feira, 24 de julho de 2008 12:36

Todas as Respostas

  • Tentei usar o RegularExpressionValidator, passando a ER ^([0-1][0-9]|[2][0-3]):[0-5][0-9]$, como diz Ailton Filho no post abaixo e mesmo assim ainda não deu certo.
    http://forums.microsoft.com/msdn-br/ShowPost.aspx?PostID=2294544&SiteID=21
    quarta-feira, 23 de julho de 2008 14:39
  • Ilano,

     

    1º) Se eu digitar apenas 08: esta função aceita;
    Você quer dizer se ele chamar a função com passando um parametro somente, ele não deveria aceitar é isso que você quer? pois você criou a função com dois parametros e na chamada só esta passando um parametro?

     

    2º) Preciso validar esta data tb após sair do campo (OnBlur="Verifica_Hora(this)") para evitar o primeiro problema, mas tb não está dando certo.

    O que não da certo? Ocorre algum erro? A função chega a ser chamada?

     

    Abraços

     

    Estevam

     

    quarta-feira, 23 de julho de 2008 16:53
  • Olá Luiz Estevam,


    Desde já agradeço sua atenção.


    1º) Se eu digitar apenas 08: esta função aceita;
    Você quer dizer se ele chamar a função com passando um parametro somente, ele não deveria aceitar é isso que você quer? pois você criou a função com dois parametros e na chamada só esta passando um parametro?

    Isso mesmo! Eu vi uma função que aceita apenas valores decimais e à proporção em que o usuário digita os zeros e a vírgula à esquerda vão sendo incrementados. Não sei se daria certo para implementar algo assim neste caso.


    2º) Preciso validar esta data tb após sair do campo (OnBlur="Verifica_Hora(this)") para evitar o primeiro problema, mas tb não está dando certo.

    O que não da certo?

    Ele não está fazendo a verificação.

    Ocorre algum erro?

    Nenhum.

    A função chega a ser chamada?

    Bom, em meu console de erros não há registro de nenhum problema quanto a essa chamada, assim, acredito q sim, ela está sendo chamada.

    quarta-feira, 23 de julho de 2008 18:06
  • function Verifica_Hora(campo)
    {
    var Value = campo.value;
    var Estado = Value.length == 5 && Value.Substring(2,1) == ":";
    var Hora = parseInt(Value.substring(0,2))
    var Minuto = parseInt(Value.substring(0,2))

    Estado = Hora >=0 && Hora <=23 && Minuto >=0 && Minuto <=59;
    }

    Estado = true para valido
    O formato deve ser HH:MM
    quarta-feira, 23 de julho de 2008 18:11
  • Ilano, deixa eu lhe perguntar, estava olhando melhor a funçao que voce passou, se voce chamar ela como esta descrito nos cometários "onkeyup" passando os argumentos, igualzinho onkeyup="Mascara_Hora(this.value,this)" , esta funçao além de já fazer a mascara do campo, quando ela chega ao 5º numero ela já válida a hora!! Porque vc nao pode utilizar assim? Sendo que a funçao praticamente implementa o que vc quer? Estou lhe perguntando para poder lhe ajudar melhor.

     

    Abraços

     

    Estevam 

    quarta-feira, 23 de julho de 2008 21:04
  • Olá pessoal,

    Novamente agradeço a atenção de vcs.

    Luiz Estevam,

    Code Snippet

    Porque vc nao pode utilizar assim? Sendo que a função praticamente implementa o que vc quer?


    Bem, na verdade eu usava ela assim mesmo apenas com o onkeyup mas a função não executava como estou precisando. Na verdade executa assim, se eu digitar, por exemplo 10:61, a função valida. Mas se eu passar apenas os dois primeiros dígitos 10 e sair do campo, nada acontece, mesmo a função retornando a máscara com os dois pontos (Smile.
    Então, minha preocupação é ter q acabar com aquela mensagem chata de erro de parâmetro quando fizer o insert desta informação caso esse problema de digitação ocorra.

    Mas, caso não possa ser verificado isso em java script, pensei em algo do tipo (antes de salvar):

    If Not IsDate(TxtDataInicial.Text) Then
    ....
    End If

    Mas não encontrei nada referente à hora.


    JCKödel,

    Tentei mudar para o q vc postou, mas tb não deu certo.
    quinta-feira, 24 de julho de 2008 11:43
  • Ilano, agora entendi qual sua real necessidade.

    Voce utilizar a funçao que nosso amigo postou, só ajustando em alguns detalhes, segue abaixo:]

     

    function Verifica_Hora(campo)
    {
     var vCampo = campo.value;
     if (vCampo.length == 5 && vCampo.substring(2,3) == ":" )
     {
      var retorno = false;
      var Hora = parseInt(vCampo.substring(0,2));
      var Minuto = parseInt(vCampo.substring(3,5));
      retorno = ((Hora >=0 && Hora <=23) && (Minuto >=0 && Minuto <=59) ) ;
      if (!retorno)
      {
       alert("Hora inválida");
       campo.value = "";
      }
     }
     else
     {
      alert("Hora inválida");
      campo.value = "";
     }
    }

     

    Para utilizar a funçao, no seu campo de que se digita a hora coloca:

     

    <input type="text" value="15:25" id="txt1" onblur="Verifica_Hora(this);" />

     

    Abraços

     

    Estevam

    quinta-feira, 24 de julho de 2008 12:36
  • Blz Luiz Estevam!!!!!

    Era isso mesmo!

    Obrigadão, cara!
    quinta-feira, 24 de julho de 2008 14:15
  • Olá pessoas.... preciso de uma validação que funcione da seguinte maneira:

     

    campo 1 recebe: 00:00:15

    campo 2 recebe: 00:00:20

    campo 3 diminui campo2-campo2: 00:00:05

     

    ja consegui fazer a máscara da hora:minutosTongue Tiedegundos mas n sei um código javascript que dminuia e dê o resultado ah lembrando... tudo isso é escrito num campo de formulário!

     

    Grato qm puder me ajudar!

     

    MSN afamilialegal@hotmail.com

    terça-feira, 20 de janeiro de 2009 12:00