Power Pixel
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.


Fechar janela

WictorP WictorP  • 10.07.16 18:59

Mascara + validação + somente numeros Empty Mascara + validação + somente numeros 10.07.16 18:59

WICTORP

POWER-PIXEL FÓRUM

Bom, eu não sei se este tópico está no local correto, por não se tratar de um tópico para pedir ajuda e sim para divulgar um conteúdo que eu desenvolvi.
Hoje eu procurei pela internet sobre mascara para input (campo de texto) de data e hora com validação, porém não encontrei nenhum funcional e decidi desenvolver o meu.
Um dos detalhes do meu código é que ele funciona em qualquer navegador, testei ele no Chrome, Firefox e Internet Explorer, funcionou em todos.
Sem mais delongas.

Código Jquery:
Código:
    function mascaraData(data,id) {
      verificaNum(id);
      var mdata = "";
      mdata = mdata + data;
      var quantidade = $(id).val().length;
      if(quantidade == 2) {
        mdata = mdata + "/";
        $(id).val(mdata);
      }
      if(quantidade == 5) {
        mdata = mdata + "/";
        $(id).val(mdata);
      }
      if(quantidade == 10){
        verificaData(id);
      }
      if(quantidade >= 11) {
        $(id).val($(id).val().substring(0,10));
      }
    }
    function verificaData(id) {
      var dia = $(id).val().substring(0,2);
      var mes = $(id).val().substring(3,5);
      var ano = $(id).val().substring(6,10);
      var conte = $(id).val();
      var situacao= "";
      // verifica o dia valido para cada mês
      if((dia < 1)||(dia < 01 || dia > 31)) {
        situacao = 'Dia deve ser entre 1 e 31.';
        var altera = "  /"+mes+"/"+ano;
      }

      if(mes == 02 || mes == 04 || mes == 06 || mes == 09 || mes == 11) {
        if(dia > 30) {
          situacao = 'No mês selecionado não tem dia 31.';
          var altera = "30/"+mes+"/"+ano;
        }
      }

      // verifica se é ano bissexto
      if((((ano % 4) == 0 && (ano % 100)!=0) || (ano % 400)==0)) {
        if(mes == 02 && dia > 29) {
          situacao = "O mês de fevereiro vai no máximo 29 dias.";
          var altera = "29/"+mes+"/"+ano;
        }
      }else {
        if(mes == 02 && dia > 28) {
          situacao = "Esse ano não é um ano bissexto";
          var altera = "28/"+mes+"/"+ano;
        }
      }

      // verifica se o mês é valido
      if(mes < 01 || mes > 12) {
        situacao = 'Mês é de 01 à 12.';
        var altera = dia+"/12"+"/"+ano;
      }

      //verifica conteudo
      if(conte == '') {
        situacao = 'Não existe data.';
      }

      //alerta dos erros
      if(situacao != '') {
        $(id).val(altera);
        alert(situacao);
        $(id).focus();
      }
    }

    function mascaraHora(hora,id) {
      var mhora = '';
      mhora = mhora + hora;
      var quantHora = $(id).val().length;
      if(quantHora == 2) {
        mhora = mhora + ":";
        $(id).val(mhora);
      }

      if(quantHora >= 5) {
        verificaHora(id);
      }
    }

    function verificaHora(id) {
      verificaNum(id);
      var hora = $(id).val().substring(0,2);
      var minuto = $(id).val().substring(3,5);
      var situacaoH = '';

      // verifica se a hora vai estar entra 00 e 23
      if(hora < 00 || hora > 23) {
        situacaoH = "A hora não pode ser menor que 00 (meia noite) ou maior que 23 (onde hora da noite)";
        var mhora = $(id).val().substring(2,5);
        $(id).val("  "+mhora);
      }
      // verifica se os minutos estão entre 00 e 59
      if(minuto < 00 || minuto > 59) {
        situacaoH = "Os minutos não podem ser menor que 00 ou maior que 59";
        var mhora = $(id).val().substring(0,3);
        $(id).val(mhora+"  ");
      }

      if(situacaoH != '') {
        alert(situacaoH);
        $(id).focus();

      }
    }

    function verificaNum(id) {
      $(id).keyup(function(e) {
        var quantidade = $(id).val().lenght;
        var tecla = e.which;
        if((tecla < 48 || tecla > 57) && (tecla < 96 || tecla > 105)) {
          var novaquantidade = quantidade - 1;
          var texto = $(id).val().substring(0,novaquantidade);
          $(id).val(texto);
        }
      });
    }

Código do input:
Código:
<input type="text" name="" placeholder="DD/MM/AAAA" onkeyup="mascaraData(this.value,'#alvo')" id="alvo" value="" maxlength="10"/>
<input type="text" name="" onkeyup="mascaraHora(this.value,'#hora')" id="hora" maxlenght="5"/ placeholder="HH/MM">
Lembrando que eu não sou fluente em javascript ou jQuery, sou iniciante, por isso acho que o código pode ser melhorado e muito. Porém esse foi o que eu consegui desenvolver.

Obs:Só funciona se o jQuery for chamado na página.
https://code.jquery.com/jquery-3.0.0.js

Obrigado pela atenção. Até mais.
Permissões neste sub-fórum
Não podes responder a tópicos

BH Servers

Recomendamos a BH Servers com proteção DDOS gratuita em Cloud Server de alta performance. Entrega imediata.