Jump to content
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

Share this post


Link to post
Share on other 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! :-)

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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> 

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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... 

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Ygor Silva
      Boa tarde gente. Tenho meu site em Mobirise, pra pegar leads. 
      Ao cliente clicar em enviar ele só mostra a mensagem de "obrigado, aguarde nosso contato". 
      Eu gostaria que em vez disto, ele encaminhasse ele pra página de obrigado.
      Já tentei um mente de coisas mas não funcionou.
       
      Segue abaixo o código. Este meu formulário é formoid.
      <div data-form-type="formoid">                     <!---Formbuilder Form--->                     <form action="https://mobirise.com/" method="POST" class="mbr-form form-with-styler" data-form-title="Mobirise Form"><input type="hidden" name="email" data-form-email="true" value="A6LDZwZh8SsHY2SXE5G0uDeobTt+vGAPyztLTpaFnJ3YS523L+3ekb+dfC0ljSO2ENKcG2x7MzCrFsvX6BsE84UN+iQwUvASww4aTuqS7DVv4QO8axCqYvnhYxsAOEpX">                         <div class="row">                             <div hidden="hidden" data-form-alert="" class="alert alert-success col-12">Obrigado por deixar seu contato. Em breve ligaremos pra você.</div>                             <div hidden="hidden" data-form-alert-danger="" class="alert alert-danger col-12">                             </div>                         </div>                         <div class="dragArea">                             <div class="col-md-6  form-group" data-for="name">                                 <input type="text" name="name" placeholder="Seu nome" data-form-field="Name" required="required" class="form-control input display-7" id="name-form4-d">                             </div>                             <div class="col-md-6  form-group" data-for="phone">                                 <input type="text" name="phone" placeholder="Telefone" data-form-field="Phone" required="required" class="form-control input display-7" id="phone-form4-d">                             </div>                             <div data-for="email" class="col-md-12  form-group">                                 <input type="text" name="email" placeholder="E-mail" data-form-field="Email" class="form-control input display-7" required="required" id="email-form4-d">                             </div>                                                          <div class="col-md-12 input-group-btn  mt-2 align-center"><button type="submit" class="btn btn-primary btn-form display-4" href="obrigado.html#header3-2j">ENVIAR</button></div>                         </div>                     </form><!---Formbuilder Form--->                 </div>  
    • By smashplus
      Olá amigos, sendo breve, apenas gostaria de saber se alguem sabe por onde começo para fazer por exemplo o seguinte:
       
      Existe o usuário 1 e o usuário 2,  quando o usuário 1 insere uma linha no bd, ele manda uma mensagem para o usuário 2, avisando tipo, foi inserido uma linha no bd para o usuário, tipo aqueles popup sabe.
       
      Se alguem puder dar uma luz, tenho noções basicas de php e ajax...
       
      Agradeço se alguem puder dar a direção.
    • By joaopedropeterle
      Boa tarde pessoal!
       
      Preciso fazer os valores digitados no campo do formulário serem escritos de forma inversa, pois se trata de dinheiro, nada do que fiz deu certo até agora... meu código está assim:
       
      var valor = $("#valor"); valor.keyup(() => { valor.val(VMasker.toPattern(valor.val(), "999.999.999,99", {reverse: true})); }) #valor é a ID do campo onde será inserido... Não sei se fui bem claro, sou apenas iniciante...rsrs
    • By roohmcd
      Galera, seguinte, eu tenho um formulário com dois selects ocultos, eles serão exibidos somente quando eu selecionar uma das opções no select pai, porém toda vez que faço o envio deste ele pega o valor de um select oculto. Tem alguma maneira de fazer com ele só pegue o valor se eu selecionar a opção no select pai ?
       
      Este é meu formulário:
       
      <form id="createusers" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" class="needs-validation" oninput='userrepassword.setCustomValidity(userrepassword.value != userpassword.value ? "Senhas não conferem." : "")' novalidate> <div class="form-group"> <div class="input-group"> <div class="input-group-prepend"> <div class="input-group-text"><i class="fas fa-user-circle"></i></div> </div> <input id="username" name="username" placeholder="Usuário" type="text" aria-describedby="usernameHelpBlock" required="required" class="form-control"> <div class="invalid-feedback">Por favor, digite um nome de usuário válido.</div> </div> <small id="usernameHelpBlock" class="form-text text-muted">Digite um nome de usuário.</small> </div> <div class="form-group"> <div class="input-group"> <div class="input-group-prepend"> <div class="input-group-text"><i class="fa fa-lock"></i></div> </div> <input id="userpassword" name="userpassword" placeholder="Senha" type="password" required="required" class="form-control" aria-describedby="userpasswordHelpBlock"> <div class="invalid-feedback">Por favor, digite uma senha.</div> </div> <small id="userpasswordHelpBlock" class="form-text text-muted">Digite uma senha para o usuário. Sua senha deve ter no mínimo 6 caracteres.</small> </div> <div class="form-group"> <div class="input-group"> <div class="input-group-prepend"> <div class="input-group-text"><i class="fa fa-lock"></i></div> </div> <input id="userrepassword" name="userrepassword" placeholder="Confirme a senha" type="password" required="required" class="form-control" aria-describedby="userrepasswordHelpBlock"> <div class="invalid-feedback">Por favor, confirme a senha.</div> </div> <small id="userrepasswordHelpBlock" class="form-text text-muted">Confirme a senha.</small> </div> <div class="form-group"> <label>Informe o grupo do usuário</label> <select id="usergroup" name="usergroup" class="form-control" required> <option value="">-- Selecione uma opção --</option> <option value="neg">Negado</option> <option value="tot">Total</option> <option value="controlado">Controlado</option> <option value="restrito">Restrito</option> <option value="lib">Liberado</option> <option value="noc">No Cache</option> </select> <div class="invalid-feedback">Por favor, selecione uma opção para informar o grupo do usuário.</div> <small id="usergroupHelpBlock" class="form-text text-muted">Selecione um grupo para o usuário.</small> </div> <div class="form-group"> <label>Selecione o grupo controlado para o usuário</label> <select id="usergroup-controlado" name="usergroup" class="form-control"> <option value="c01">Controlado 01</option> <option value="c02">Controlado 02</option> <option value="c03">Controlado 03</option> </select> </div> <div class="form-group"> <label>Selecione o grupo restrito para o usuário</label> <select id="usergroup-restrito" name="usergroup" class="form-control"> <option value="r01">Restrito 01</option> <option value="r02">Restrito 02</option> <option value="r03">Restrito 03</option> <option value="r04">Restrito 04</option> <option value="r05">Restrito 05</option> <option value="r06">Restrito 06</option> <option value="r07">Restrito 07</option> <option value="r08">Restrito 08</option> <option value="r09">Restrito 09</option> </select> </div> <div class="form-group"> <button id="submitcreateuser" name="submitcreateuser" type="submit" class="btn btn-primary">Criar Usuário</button> </div> </form> E para ocultar estes selects uso os seguintes scripts:
       
      <script type="text/javascript"> (function( $ ){ $.fn.dependsOn = function(element, value,callback) { var elements = this; var isContainer = false; //add change handler to element $(element).change(function(){ var $this = $(this); var showEm = false; if ( $this.is('select') ) { var fieldValue = $this.find('option:selected').val(); if ( !value ) { showEm = fieldValue && $.trim(fieldValue) != ''; } else if (typeof(value) === 'string') { showEm = value == fieldValue; } else if ($.isArray(value)) { showEm = ($.inArray(fieldValue, value) !== -1); } } else if ($this.is('input[type="text"]')){ var fieldValue = $this.val(); if ( !value ) { showEm = fieldValue && $.trim(fieldValue) != ''; } else if (typeof(value) === 'string') { showEm = value == fieldValue; } else if ($.isArray(value)) { showEm = ($.inArray(fieldValue, value) !== -1); } } // add containers for input else if ($this.hasClass('depends-container')){ isContainer=true; var target = $this.find('input[type="text"]'); var fieldValue = target.val(); if ( !value ) { showEm = fieldValue && $.trim(fieldValue) != ''; } else if (typeof(value) === 'string') { showEm = value == fieldValue; } else if ($.isArray(value)) { showEm = ($.inArray(fieldValue, value) !== -1); } } if(isContainer){ elements.each(function(){ $(this).toggle(showEm); if(callback){ callback(); } }); }else{ elements.closest('div').toggle(showEm); if(callback){ callback(); } } }); //hide the dependent fields return elements.each(function(){ var $this= $(this); var isContainer= false; $(element).each(function(index){ var el = $(this); if(el.hasClass('depends-container') && el.find('input[type="text"]').length){ isContainer = true; el = el.find('input[type="text"]'); if(el.val() != '' && $this.is('visible') == false ){ $this.show(); if(callback){ callback(); } } } }); if(!isContainer){ $(this).closest('div').hide(); } }); }; })( jQuery ); </script> <script type="text/javascript"> $('#usergroup-controlado').dependsOn('#usergroup', ['controlado']); $('#usergroup-restrito').dependsOn('#usergroup', ['restrito']); </script> E este é o script que faz o envio do formulário, onde obtenho as informações preenchidas:
       
      <?php if(isset( $_POST['submitcreateuser'] )) { $fullname = $_POST["fullname"]; $username = $_POST["username"]; $userpassword = $_POST["userpassword"]; $userrepassword = $_POST["userrepassword"]; $networkaccess = $_POST["networkaccess"]; $usergroup = $_POST["usergroup"]; $createuser = "$username $fullname $networkaccess $usergroup $userpassword $userrepassword s -a; echo $?"; echo "<pre> >> $createuser << </pre>"; } ?> Os selects ocultos são os do grupo Controlado e Restrito, quando selecionar essas opções ele abre outro select com as opções respectivas, tipo Controlado ele irá exibir o select Controlado 01, Controlado 02, Controlado 03. E assim serve também para a opção Restrito.
       
      Tem algo de errado no meu formulário ?
    • By lucasvbl
      <form id="frmDados" name="frmDados" class="form-horizontal" method="post" action="" enctype="multipart/form-data"> <input name="acao" id="acao" type="hidden" value="paginas"> <? if($_idCodigo){ ?> <input name="r" id="r" type="hidden" value="<?=$_idCodigo;?>"> <? } ?> <div class="row"> <div class="col-md-6"> <div class="form-group row"> <label class="col-md-2 col-form-label"> Titulo</label> <div class="col-md-10"> <input class="form-control" autocomplete="off" type="text" name="txtDescricao" id="txtDescricao" value="<?=$_rowDados->C02_DESCRICAO;?>"> </div> </div> </div> <? if($_idCodigo){ ?> <div class="col-md-6"> <div class="form-group row"> <label class="col-md-2 col-form-label"> Link</label> <div class="col-md-10"> <input readonly="readonly" class="form-control" type="text" name="txtLink" id="txtLink" value="pagina.php?p=<?=$_rowDados->C01_ID;?>"> </div> </div> </div> <? } ?> </div> <div class="row"> <div class="col-md-12"> <div class="form-group row"> <label class="col-md-12 col-form-label">Conteúdo</label> <div class="col-md-12"> <textarea class="form-control" name="txtConteudo" id="txtConteudo"> <?=$_rowDados->C04_CONTEUDO;?> </textarea> </div> </div> </div> </div> <div class="col-md-12" style="text-align: center;"> <button class="btn btn-oval btn-success" type="button" id="btGravar">Gravar</button> </div> </form> <script type="text/javascript"> $(function () { $("#btGravar").click(function(){ erros = 0; if(!$("#txtDescricao").val()){ mensagem('mensagemDIV', 'danger', 'Preencha o campo <strong>Título para a página</strong>.', 0, 'txtEntidade'); erros = 1; } if(erros > 0){ return; } off("btGravar"); var formData = $("#frmDados").serialize(); $.ajax({ url: "app.php", type: "POST", data: formData, dataType: "json", success: function (retorno) { if(retorno.status == '1'){ tratarRetorno(retorno); } if(retorno.status == '400'){ tratarRetorno(retorno); } on("btGravar"); return; } }).fail(function (jqXHR, textStatus, error) { console.log(jqXHR.responseJSON); }); return; }); }); $(document).ready(function(){ $("#txtTitulo").focus(); }); </script> Estou com um problema num crud utilizando ajax, ele meio que "corrompe a string"... 
      ENVIO ASSIM
       
      ELE SALVA ASSIM
       
      Não estou utilizando nenhum editor nada, num textarea
      ESSE CODIGO
       
       
       
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.