Ir para conteúdo
Dineysil

Ajax e radio no form

Recommended Posts

Boa tarde!

 

Sou iniciante em Javascript e Ajax e estou precisando de criar uma função para:
Em um Form tenho dois "radios" jurídico e físico, preciso que ao clicar em uma opção no form alterne uma "Label" e uma "Text"
Se a opção for Físico a Label será CPF: e a Text terá uma mascara de cpf

Se a opção for Jurídico a Label será CNPJ: e a Text terá uma mascara de cnpj

 

Com relação as máscaras eu já as tenho.

 

O site está em ASP Clássico

Agradeço se alguém poder ajudar.

 

Claudiney

Compartilhar este post


Link para o post
Compartilhar em outros sites

Toma!

 

HTML:

<div>
  <fieldset>
    <legend>Escolha o tipo</legend>
    <label>
      <input type="radio" value="fisica" data-target="tipo_documento" name="tipo_documento" checked />
      Pessoa Física
    </label>

    <label>
      <input type="radio" value="juridica" data-target="tipo_documento" name="tipo_documento" />
      Pessoa Jurídica
    </label>
  </fieldset>

  <label>
    <span data-target="label_documento">Digite o CPF:</span>
    <input type="text" />
  </label>
</div>

Javascript:

var radioInputs = document.querySelectorAll('[data-target=tipo_documento]');

radioInputs.forEach(function (input) {
  input.addEventListener('change', function (event) {
    var pergunta = event.target.value === 'fisica'
      ? 'Digite o CPF:'
      : 'Digite o CNPJ:';
    
    document.querySelector('[data-target=label_documento]')
      .innerText = pergunta;
  });
});

Resultado: https://jsbin.com/soqajorefu/3/edit?html,js,output

 

O código está utilizando o atributo data-* para dizer quem é quem... os radios precisam ter o mesmo name pra funcionar. Acredito que você terá problemas com a função de máscara, mas aí já é outro problema....

 

Qualquer dúvida, grita! :-)

Compartilhar este post


Link para o post
Compartilhar em outros sites
12 minutos atrás, Michael Granados disse:

Toma!

 

HTML:


<div>
  <fieldset>
    <legend>Escolha o tipo</legend>
    <label>
      <input type="radio" value="fisica" data-target="tipo_documento" name="tipo_documento" checked />
      Pessoa Física
    </label>

    <label>
      <input type="radio" value="juridica" data-target="tipo_documento" name="tipo_documento" />
      Pessoa Jurídica
    </label>
  </fieldset>

  <label>
    <span data-target="label_documento">Digite o CPF:</span>
    <input type="text" />
  </label>
</div>

Javascript:


var radioInputs = document.querySelectorAll('[data-target=tipo_documento]');

radioInputs.forEach(function (input) {
  input.addEventListener('change', function (event) {
    var pergunta = event.target.value === 'fisica'
      ? 'Digite o CPF:'
      : 'Digite o CNPJ:';
    
    document.querySelector('[data-target=label_documento]')
      .innerText = pergunta;
  });
});

Resultado: https://jsbin.com/soqajorefu/3/edit?html,js,output

 

O código está utilizando o atributo data-* para dizer quem é quem... os radios precisam ter o mesmo name pra funcionar. Acredito que você terá problemas com a função de máscara, mas aí já é outro problema....

 

Qualquer dúvida, grita! :-)

 

Michael Granados muito obrigado, é isso aí!

Perfeito!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma outra dúvida, no text vou colocar uma máscara para CPF e uma para o CNPJ  em javascript , alternando estas mascaras no text de acordo com a opção selecionada.

<script>
function MascaraCPF(cpf)

var strCPF = []; 
strCPF = strCPF + cpf; 
if (strCPF.length == 3){ 
strCPF = strCPF + '.'; 
document.form1.cpf.value = strCPF;
}
if (strCPF.length == 7){ 
strCPF = strCPF + '.'; 
document.form1.cpf.value = strCPF; 
}
if (strCPF.length == 11){ 
strCPF = strCPF + '-'; 
document.form1.cpf.value = strCPF; 
}
}
</script> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

E a dúvida seria...? Não, brincadeira... Bom, neste caso você tem três opções:

 

- manipular a forma como o input vai manipular as máscaras encapsulando-as em um método só variando conforme o tipo de campo, recomendo limpar o campo no momento em que o usuário trocar de CNPJ para CPF e vice-versa

- trocar o campo de input inteiro, atribuindo  devida máscara no momento da troca de tipo de campos

- deixar os dois campos na página com names distintos para fazer o tratamento do lado do servidor e apenas trocar o display/classe deles quando trocar o radio

 

Use your illusion.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem razão não ficou claro a dúvida, mas é relativo a sua primeira citação.
Quando selecionar a opção, vai alterar a label e a mascara do input, o problema  (dúvida) é aí como trocar a mascara.

Como eu disse estou iniciando em javascript e mexendo no seu código não consegui a proeza. kkk... 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicionei lá as máscaras e a alteração, utilizei o removeEventListener e o addEventListener... também precisei colocar o mesmo ao iniciar a página...

 

https://jsbin.com/yobubidifa/1/edit?html,js,output

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por ment0r
      Boa noite pessoal, tudo bem?
       
      Estou desenvolvendo um sistema simples com exibição de formulário via modal. Uma vez cadastrado o serviço (tabela possui apenas dois campos, id e nome), eles são exibidos numa tabela com um ícone que permite a alteração do nome.

       
      Eu clico no ícone e é chamado um modal que é gerado via ajax (pois são vários registros).
       

       
      Nesse modal é mostrado o serviço e uma vez alterado, o botão Salvar chama uma função que atualiza a tabela servico, concluindo a tarefa. Fiz o mesmo processo pra cadastrar o serviço, com a diferença de que o modal está presente na mesma página, ou seja, não é chamado via ajax.
       
      Eis os códigos:
      <a href="#" onclick="modalUpdate(<?= trim($array['id']) ?>)"> <i class='bx bx-edit'></i> </a> // Trecho onde eu chamo a função modalUpdate. Função btAltServico click:
      $('#btAltServico').click(function() { var inpnome = $('#nome'); var inpid = $('#id'); if (inpnome.val() == '') { swal("Atenção", "Por favor, preencha os campos obrigatórios", "warning"); if (inpnome.val() == '') { inpnome.css("border","2px solid #f94545"); } else { inpnome.css("border",""); } alert(inpnome); alert(inpid); } else { $.ajax({ url: '../inc/ajax/altServico.php', type: 'post', dataType: 'json', // pode ser html data: { nome : inpnome.val(), id : inpid.val() }, success: function(resposta){ if (resposta == 1) { inpnome.val(""); inpnome.css("border",""); swal("Sucesso", "Serviço alterado", "success"); } else { if (resposta == 0) { swal("Erro", "Serviço não alterado. Log de erro gerado.", "error"); } else { swal("Atenção", "Serviço já cadastrado", "warning"); } } } }) } });  
      E modalUpdate.php :
       
      <?php /* * altServico.php * * Script responsável pelo update de serviços na tabela servico * * Função chamada pelo arquivo ajax.js */ //if ($_POST) { require'../conn.php'; require'../../class/class.geral.php'; $geral = new Geral(); $nome = $_POST['nome']; $id = $_POST['nome']; $ativo = 1; // Verifica se o servico já foi cadastrado $sqlVer = "select nome from algo68_db_cliente.servico where nome = '".$nome."' and id <> ".$id.""; $queryVer = mysqli_query($conn, $sqlVer); $resultVer = mysqli_num_rows($queryVer); if ($resultVer > 0) { echo json_encode(2); // servico já cadastrado } else { // Update do servico $sql = "update algo68_db_cliente.servico set nome = '".$nome."', ativo = ".$ativo." where id = ".$id; $query = mysqli_query($conn, $sql); $result = mysqli_affected_rows($conn); if ($result > 0) { echo json_encode(1); // alterou o servico } else { $geral->logErro(date('d/m/Y|H:i:s'), @$_SERVER[REQUEST_URI], 'AlterarServico', mysqli_error($conn)); echo json_encode(0); // não alterou o servico } } //} ?> O problema é que quando clico no botão Salvar, não acontece nada - se eu colocar um alert qualquer na função click, só pra saber se está chegando, também não da nada. E está da mesma forma que o cadastro de serviço, que funciona perfeitamente.

      Bom, é isso pessoal, tentei ser o mais breve e especifico possível. Qualquer ajuda é bem vinda, obrigado a todos, desde já.
    • Por Danilo - Jesus voltará!
      Olá pessoal, tenho uma div a qual através de um select categorias eu trago dados de empresas do banco, aí preciso clicar nas listagens das empresas e pegar o ID quando clica no checkbox e gravar pelo ajax novamente na session feita no arquivo php tipo um carrinho de compras, que essa parte já tenho... só não to conseguindo pegar os ids gerados dinamicamente no retorno feito do ajax, eles aparecem com F12 ao inspecionar, mas não aceita eu clicar para pegar o ID, acho que é algo de DOM, mas não to sabendo fazer... alguém aí saberia me ajudar como pegar esses ids ao clicar, já que eles vem dinamicamente?
       
      obrigado
    • Por joao b silva
      <input type="text" class="form-control" id="produto" name="produto"  onblur="BuscaPr()">
       
       
      Ola. eu chamo a função JS a seguir  no onblur do input acima. cikiqyeu is alerts para confirmar a chamada da função. ta chamando. mas alem dos alerts nao acontece mais nada. segue a função JS e o arquivo php que é chamado no ajax:
       
       
      FUNSAO JS
       
          function BuscaPr(){
              var buscaTexto = document.getElementById('produto').value
              alert(buscaTexto) 
              alert(buscaTexto.length) 
              $.ajax({
                  method: 'post',
                  url: 'sistema/produto/buscapr.php',
                  data: {busca: 'sim', texto: buscaTexto},
                  dataType: 'json',
                  success: function(retorno){
                          if(retorno.qtd == 0){
                              alert('q = 0')
                                  $('#resbuscapro').html('<p>Não encontramos resultados para sua busca</p>');
                          }else{
                              alert('q + 0')
                                  $('#resbuscapro').html(retorno.dados);
                          }
                  }
              });
          }

      O ARQUIVO PHP:
       
      <?php
      if (!session_id()):
          session_start();
      endif;
      require_once('_app/Config.inc.php');
      require_once('./Lib.php');
      if (isset($_POST['busca']) && $_POST['busca'] == 'sim'):
          $textoBusca = strip_tags($_POST['texto']);
          $retorno = array();
          $Par = "EM={$_SESSION['userlogin']['emCODIGO']}";
          $Fil = " where emCODIGO = :EM and prDESCRICAO like '%{$textoBusca}%' ";
          $Produto = new Read;
          $Produto->FullRead("select * from produto {$Fil}", $Par);
          if ($Produto->getResult()):
              $retorno['qtd'] = $Produto->getRowCount();
              foreach ($Produto->getResult() as $pro):
                  extract($pro);
                  $retorno['dados'] .= '<a href="#" id='.$prCODIGO.':'.$prVENDA.'">'. utf8_encode($prDESCRICAO).'</a>';
              endforeach;
          endif;
          echo json_encode($retorno);
      endif;
      ?>
    • Por luiz monteiro
      Bom dia!
       
      A questão é a seguinte, tenho o seguinte form 
       
      <form onsubmit="return false;" action="./busca.php" method="post" name="buscar" id="buscar">
       
                 <input type="text" name="texto">
       
                <button>Executa</button>
       
      </form>
       
      Que está funcionando perfeitamente com a seguinte estrutura do script abaixo
       
        var form = document.getElementById('buscar');
       
        form.addEventListener('submit', function(e)
        {
            e.preventDefault();
       });
       
       
      O que preciso, é saber como submeter esse mesmo formulário ao clicar em button fora do form sem modificar esse script?
       
      <button id="fora_do_form">Submeter o form</button>
       
       
      Agradeço desde já!
       
       
    • 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>  
×

Informação importante

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