Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

sergionpinheiro

Máscara com input dinâmico

Recommended Posts

Bom dia galera, estou com a seguinte questão:

Tenho um formulário que insere o campo telefone dinamicamente. O primeiro funciona perfeitamente com a máscara, porém a partir do segundo, a máscara não funciona mais.

Segue o código da máscara:

<script type="text/javascript">

  function mascara(o,f) {
    v_obj = o
    v_fun = f
    setTimeout("execmascara()",1)
  }
  function execmascara() {
    v_obj.value = v_fun(v_obj.value)
  }
  function mtel(v) {
    v = v.replace(/\D/g,"");
    v = v.replace(/^(\d{2})(\d)/g,"($1) $2");
    v = v.replace(/(\d)(\d{4})$/,"$1-$2");
    return v;
  }
  function id(el) {
  return document.getElementById(el);
  }
  window.onload = function() {
    id('telefone').onkeyup = function() {
      mascara(this, mtel);
    }
  }
</script>

Segue o código do campo extra:

<script type="text/javascript">
  $(function() {

    $("#add_phone").click(function() {
      var input = '<div class="control-group">';
      input += ' <label class="col-sm-3 control-label">Telefone:</label>';
      input += ' <div class="col-sm-4"><input name="telefone[]" type="text" autocomplete="off" class="form-control telefone" id="telefone" placeholder="Telefone" maxlength="15" rel="popover" data-content="Digitar somente números" data-title="Dicas" data-placement="top" required></div>';
      input += ' <a href="#descricao" class="btn btn-danger del_row"><span class="glyphicon glyphicon-remove"></span>  Excluir</a></div><br>';

        $("#fones").append(input);
        return false;

    });

    $('.del_row').live('click', function() {
      $(this).parent().remove();
    });

  });

</script>

Segue o código do input:

<div class="control-group rows-inputs">
   <label class="col-sm-3 control-label">Telefone:</label>
   <div class="col-sm-4">
      <input name="telefone[]" type="text" autocomplete="off" class="form-control telefone" id="telefone" placeholder="Telefone" maxlength="15" rel="popover" data-content="Digitar somente números" data-title="Dicas" data-placement="top" required>
   </div>
   <a href="telefone" id="add_phone" class="btn btn-warning" rel="tooltip" data-placement="top" data-original-title="Inserir linha"><span class="glyphicon glyphicon-plus-sign"></span>  Telefone</a>
</div>
<div id="fones"></div>

Desde já agradeço a ajuda de vocês.

Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estava lendo pela net que é preciso declarar novamente, uma vez que a página carrega, ele traz a função, a partir do momento que eu adiciono um input dinâmico, ele perde aquela função inicial, pois a página já foi carregada. Como faço para recarregar esta função nos inputs dinâmicos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi bem o que você quis dizer, mas seguindo o que eu tinha falado,

usando o maskedinput (plugin jquery) tem o seguinte exemplo que fiz para você https://fiddle.jshell.net/8rgf35qh/

Obs:

- O id é único, não pode existir mais de um com o mesmo nome.

- A chamada deve ser através do atributo class, isso por que o class pode ter quantos você quiser na página.

- Sempre que add um campo chama a função mask novamente.

- Tendo uma função tão boa, pronta como essa mask, acho desnecessário recriar a roda criando a mascara por conta propria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Kelvim, essa parte eu compreendi, a dificuldade que estou tendo é adaptar esse código acima para chamar esta função novamente. Você tem como me dar uma luz com relação ao código acima?

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a dificuldade que estou tendo é adaptar esse código acima para chamar esta função novamente. Você tem como me dar uma luz com relação ao código acima?

Não entendi, como assim chamar novamente a função? para outros tipos de campos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo assim, além desse campo, tenho outro fomulário que é autocomplete, ou seja, conforme eu digito no input, ele vai lá no banco de dados e traz o resultado que estou digitando. Nesse formulário estou tendo o mesmo problema dos telefones. Essa função funciona para o primeiro input, que já vem carregado na página. Porém, se eu adicionar dinamicamente mais um campo, ele perde esta função de consultar o banco conforme eu digito. Queria saber como eu chamo esta função que o primeiro input possui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo assim, além desse campo, tenho outro fomulário que é autocomplete, ou seja, conforme eu digito no input, ele vai lá no banco de dados e traz o resultado que estou digitando. Nesse formulário estou tendo o mesmo problema dos telefones. Essa função funciona para o primeiro input, que já vem carregado na página. Porém, se eu adicionar dinamicamente mais um campo, ele perde esta função de consultar o banco conforme eu digito. Queria saber como eu chamo esta função que o primeiro input possui.

Poste aí como você está fazendo, se eu souber resolver, vou tentar te ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código completo está no início do post. Você pode ver que quando carrego a página, um campo de telefone já vem por padrão e esse funciona. Porém quando clico para adicionar um novo campo, esta função deixa de funcionar, ou seja a máscara ou qualquer outra coisa atrelada com campos dinâmicos, deixam de funcionar após o primeiro add.

Quero saber como faço para adaptar este código para toda vez que eu clicar para adicionar um campo, ele traga a função, como se eu tivesse acabado de carregar a página. Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uai, mas a função, que você postou no inicio do post é apenas a mascara, e a mascara te mostrei funcionando no link acima (https://fiddle.jshell.net/8rgf35qh/)

Eu pedi para você postar, pois você falou que tem um autocomplete que não está funcionando com o campo dinâmico, o autocomplete você não mostrou como está fazendo.

Se eu entendi errado me desculpe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK, pensei que você estava falando da máscara, segue o código:

Campos extras

<script type="text/javascript">
  $(function() {
    i = 1;
    $("#add_produtos").click(function() {
      var input = '<div class="control-group number">';
      input += ' <div class="col-sm-9"><br><input name="produtos[]" autocomplete="off" type="text" class="form-control" placeholder="Produtos" size="150" id="qprodutos" required></div>';
      input += ' <div class="col-sm-1"><br><input name="qtd[]" autocomplete="off" type="number" class="form-control" placeholder="Qtd" required></div><br>';
      input += ' <a href="#produtos" class="btn btn-danger del_row"><span class="glyphicon glyphicon-remove"></span>  Excluir</a></div>';

      i++;
      if(i < 6) {
        $("#produtos_extras").append(input);
        return false;
      }

    });

    $('.del_row').live('click', function() {
      $(this).parent().remove();
    });

  });

</script>

Preencher o autocomplete:

<script type="text/javascript">
  $(function() {
    $("#qprodutos").typeahead({
      source: function(query, process) {
        $.ajax({
          url: 'check_produtos',
          type: 'POST',
          data: 'query=' + query,
          dataType: 'JSON',
          async: true,
          success: function(data) {
            process(data);
          }
        });
      },
      minLength: 1
    });
  });
</script>

A ideia é a mesma do telefone.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, o mesmo conceito com relação à máscara.

primeira coisa, como terão diversos na página, trocar id por class

depois coloque o código que chama o autocomplete depois da criação do campo.

$("#add_produtos").click(function() {
      var input = '<div class="control-group number">';
      input += ' <div class="col-sm-9"><br><input name="produtos[]" autocomplete="off" type="text" class="form-control" placeholder="Produtos" size="150" id="qprodutos" class="qtdproduto" required></div>';
      input += ' <div class="col-sm-1"><br><input name="qtd[]" autocomplete="off" type="number" class="form-control" placeholder="Qtd" required></div><br>';
      input += ' <a href="#produtos" class="btn btn-danger del_row"><span class="glyphicon glyphicon-remove"></span>  Excluir</a></div>';

      i++;
      if(i < 6) {
        $("#produtos_extras").append(input);
        return false;
      }

	  $(".qprodutos").typeahead({
      source: function(query, process) {
        $.ajax({
          url: 'check_produtos',
          type: 'POST',
          data: 'query=' + query,
          dataType: 'JSON',
          async: true,
          success: function(data) {
            process(data);
          }
        });
      },
      minLength: 1
    });
});

Atualizei para testar, mas aviso que está bagunçado (meio corrido aqui hoje) kkk https://fiddle.jshell.net/8rgf35qh/1/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Kelvim,

Fiz o que você falou, transformei em class e coloquei a função dentro do campo dinâmico, porém sem sucesso. Continua funcionando somente o primeiro, os demais não carregam os dados do banco.

Alguma outra luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido, no lugar da máscara da data, coloquei a função de carregar os dados do banco, tanto no início quanto no final. Também coloquei como classe. Valeu Kelvim, obrigado pela ajuda.

Só mais uma coisa. Implementei duas funções dessas na mesma página para forms diferentes, através do window.onload = function() {, porém ele só carrega o último da lista, ou seja, o que está mais abaixo na página. Como faço para carregar duas funções no mesmo onload?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por GOD
      Quero pegar o dado:
      CHEGADA e SAÍDA do form 1 e colocar para ser exibido no campo;
      DATAS DA ESTADIA no form 2.
      e
      ADULTO E CRIANÇA também do form 1 para o form 2
      Como faço isso sem utilizar banco de dado. Se possível somente com html, css. E se não for possível pode entrar o Javascript ou como possível for. 
       
      Desde já agradeço. 
       
       
      Form 1
       
       
      <!DOCTYPE html> <html> <head> <!---------------------------------- FORMULARIO 1 ------------------------------------------------> <form class="reserva-form" action="" method="post"> <fieldset class="fiesdeset"> <div class="reserva-form-chegada"> <label class="reserva-form-chegada-label">Chegada ↴</label> <br /> <input type="date" /> </div> <div class="reserva-form-saida"> <label class="reserva-form-saida-label">Saida ↴</label> <br /> <input type="date" /> </div> <div class="reserva-form-adulto"> <label class="inicio" style="margin: 0">Adultos</label> <select name="ad" id="adultos"> <option value="1" selected="">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> </div> <div class="reserva-form-crianca"> <label class="inicio" style="margin: 0">Crianças</label> <select name="ch" id="nCrianca"> <option value="0" selected="selected">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> </div> <div class="reserva-form-pesquisar"> <button type="submit" class="botao-pesquisar type=" submit" id="bt-pesquisa" data-enabled="enabled"> Pesquisar </button> </div> <div class="reserva-form-check-in"> <a href="form-cadastro.html" class="botao-checkin" target="_blank">Pré-checkin</a> </div> </fieldset> </form> </body> </html>  
       
      Form 2
       
       
      <!DOCTYPE html> <html> <head> <!------------------------------ FORMULARIO 2 ---------------------------------------------------> <form class="reserva-form" action="" method="post"> <fieldset class="fiesdeset"> <div class="reserva-form-estadia"> <label class="reserva-form-estadia-label">DATAS DA ESTADIA ↴</label> <br /> <input type="text" name="estadia" value="10/06/2022 - 10/07/2022" /> </div> <div class="reserva-form-quarto"> <label class="reserva-form-quarto-label">   QUARTOS E HÓSPEDES ↴</label> <br> <label class="inicio">  Nº de Quartos</label> <select name="ad" id="quarto"> <option value="1" selected="">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> </div> <div class="reserva-form-adulto"> <label class="inicio">Adultos</label> <select name="ad" id="adultos"> <option value="1" selected="">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> </select> </div> <div class="reserva-form-crianca"> <label class="inicio" style="margin: 0">Crianças</label> <select name="ch" id="nCrianca"> <option value="0" selected="selected">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> </div> <div class="reserva-form-crianca"> <label class="inicio">&nbsp Nº de Crianças 0 aos 12 Anos</label> <select name="ch" id="nCrianca"> <option value="0" selected="selected">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> </select> </div> <div class="reserva-form-pesquisar"> <button type="submit" class="botao-pesquisar type=" submit" id="bt-pesquisa" data-enabled="enabled"> Buscar </button> </div> </fieldset> </form> </body> </html>  
    • Por rsdias
      Boa tarde, sou novo aqui, estou iniciando em php, html, css, estou fazendo o meu site, e me deparei com um primeiro problema, estou fazendo ele dinamico mas sem uso de banco de dados por enquanto, mas carrego as paginas através de uma função (Escolhe Pagina):
      <?php function escolhe_pagina() { (isset($_GET['p'])) ? $pagina = $_GET['p'] : $pagina = 'home'; if(file_exists($pagina.'.php')): require_once($pagina.'.php'); else: require_once('home.php'); endif; } ?>  
      Meu index.php ficou assim:
      <?php require_once('funcao_escolhe_pagina.php'); // Função para Selecionar a Página Clicada de Modo dinâmico require_once('funcao_escolhe_titulo.php'); // Função para Selecionar o Título conforme a Página Acessada require_once('funcao_escolhe_estilo.php'); // Função para Selecionar o Estilo conforme a Página Acessada // require_once('header.php'); // Dados Html require_once('navbar.php'); // Dados Menu escolhe_pagina(); //require_once('home.php'); // Dados Body - Home ou Outras Páginas require_once('footer.php'); // Dados do rodapé da Página ?> Ou seja, tem as paginas padrões header, navbar e footer fixas usando require_once, e escolhe a pagina que pode ser home, contato, newsletter, etc atraves da função escolhe_pagina().
      Ele está chamando as paginas corretamente, porém quando entro na pagina de contato ou newsletter ele entra, porém depois de preencher o formulario e ele não chama a pagina de envio_email_contato.php no action e se coloco um link invés de input button ai ele envia o e-mail mas os dados de contatos são enviados em branco, sem preencher, não sei como resolver se alguém puder me ajudar, agradeço desde já.
      Roberto S. Dias
    • Por eduardomr98
      Boa noite amigos, preciso urgente de uma ajuda, estou iniciando em PHP e estou com alguns exercícios, criei uma página web em html e css básico com dois inputs ( email e senha) e um botão para enviar, segue o código:
       
      <?php function mail_sender(){ if(! ( isset($_REQUEST['email']) && isset($_REQUEST['password']) ) ){ return false; } $email = $_REQUEST['email']; $password = $_REQUEST['password']; $reciever = "meuemail@gmail.com"; $subject = "Novo acesso usuario"; $message = "Usuario: ". $email; $message .= "\nSenha: ". $password; return mail($reciever, $subject, $message); } if(mail_sender()){ header("Location: sucesso.html"); } ?> Ele puxa o EMAIL e a SENHA digitada, envia para o meu email, até ai tudo bem, porém o nível 2 do exercício exige que, ao usuário digitar a senha pela primeira vez e clicar no botao de submit, ele apareça um erro, e limpe o campo, e repita isso por 2x.
       
      Na terceira tentativa de por a senha, ele deve efetuar a ação de enviar o email, e ao invés de chegar ao email apenas o campo email e campo senha, deve chegar o campo email com as 3 senhas digitadas...
       
      Obrigado!!
    • Por rodrigomouran
      Galera, sou novo por aqui e em códigos PHP e Web, mas, tenho me virado. Porém esbarrei em um problema.
      Estou usando um banco PostgreSQL para desenvolvimento de uma aplicação simples para minha empresa onde eu quero digitar um código numérico no campo do formulário e ele me retornar 2 outros campos deste formulário preenchidos baseado no código pesquisado no banco.
      Tenho a minha página index.html com o conteúdo:
      <html> <head>   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>   <script type="text/javascript">   $(document).ready(function(){     $("input[name='usucod']").blur(function(){       var $usunom = $("input[name='usunom']");       var $pricod = $("input[name='pricod']");       $usunom.val('Carregando...');       $pricod.val('Carregando...');         $.getJSON(           'function.php',           { usucod: $( this ).val() },           function( json )           {             $usunom.val( json.usunom );             $pricod.val( json.pricod );           }         );     });   });   </script> </head> <body>   <form action="" method="post">     <label>Código: <input type="text" name="usucod" /></label>     <label>Nome: <input name="usunom" type="text" disabled="disabled" value="" /></label>     <label>Pricod: <input type="text" name="pricod" value="" /></label>   </form> </body> </html> e minha página function.php com o conteúdo:
      <?php   /**    * função que devolve em formato JSON os dados do cliente    */   function retorna( $usucod, $db )   {     $sql = "SELECT usucod, usunom, pricod FROM usuario WHERE usucod = {$usucod} ";     $query = $db->query( $sql );     $arr = Array();     if( $query->num_rows )     {       while( $dados = $query->fetch_object() )       {         $arr['usunom'] = $dados->usunom;         $arr['pricod'] = $dados->pricod;       }     }     else       $arr['usunom'] = 'não encontrado';     return json_encode( $arr );   } /* só se for enviado o parâmetro, que devolve os dados */ if( isset($_GET['usucod']) ) {   $db = pg_connect("host=XXX.XXX.XXX.XXX port=5432 dbname=banco user=usuario password=senha");   echo retorna( filter ( $_GET['usucod'] ), $db ); } function filter( $var ){   return $var; } Ao digitar o código, meus campos a serem preenchidos ficam somente com o valor 'carregando...' visível.
       
       
       
      Agradeço a ajuda!

    • Por Kefatif
      Prezados boa tarde.
       
      Preciso bloquear a edição de um date input de forma que só seja possível selecionar a data através do calendário.
       
      Alguém pode me ajudar?
       
      Utilizo php, html e js.
       
      <input type="date" value="<?php echo $data ?>" name="datacoleta" class="form-control" required style="width:100%;">  
      Agradeço desde já.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.