[RESOLVIDO] Checar se radio esta checked e verificar campos

Bom, estou fazendo um formulario para cadastro de PF e PJ, no caso temos os campos obrigatorios para cada um, e no meu caso estou usando um unico form para os dois usando o radio para selecionar de é fisica ou juridica.
Assim o que esta acontecendo se eu deixo todos os campos required, e estou com a parte da pessoa juridica aberta ele pede que preencha também os campos required da fisica.

Tentei fazer assim, tirei o required do input, tentei verificar se o radio esta checked e verificar os campos com JS mas não deu certo.

`if(document.getElementById("juridica").checked == true){
     if (txtRazaosocial == ""){
       alert('Preencha o campo Razão Social');
         frmCont.txtRazaosocial.focus();
              return false;
            } else if (txtNomefantasia == ""){
            alert('Preencha o campo Nome Fantasia!');
            frmCont.txtNomefantasia.focus();
            return false;
            } else if (txtCnpj == ""){
            alert('Preencha o campo CNPJ!');
            frmCont.txtCnpj.focus();
            return false;
            } else if (txtIe == ""){
            alert('Preencha o camp o Inscrição Estadual!');
            frmCont.txtIe.focus();
            return false;
            }
          } else if(document.fisica.radio.checked == true){
              if (txtNome == ""){
            alert('Preencha o campo Nome');
            frmCont.txtNome.focus();
            return false;
            } else if (txtCPF == ""){
            alert('Preencha o campo CPF');
            frmCont.txtCPF.focus();
            return false;
            } else if (txtRG == ""){
            alert('Preencha o campo RG!');
            frmCont.txtRG.focus();
            return false;
            }
          }`

Posta seu HTML por gentileza.

Segue HTML, para cadastro é aberto um modal com o form.

`

<div class="modal-content">
    <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal">&times;</button>
      <h4 class="modal-title">Aprovação Contrato de Prestação de Serviços</h4>
    </div>

  <div class="modal-body">
    <p>DADOS DO CONTRATANTE</p>

    <form action="enviarCont.php" class="form-horizontal" method="POST" name="frmCont" id="Contratar" enctype="multipart/form-data">
          
          <div align="center" class="form-group">
          <p>
           <label class="radio-inline col-sm-5"><input type="radio" name="juridica" value="juridica" onclick="pessoa(this.value);" checked>Pessoa Juridica</label>
            <label class="radio-inline col-sm-5"><input type="radio" name="fisica" value="fisica" onclick="pessoa(this.value);">Pessoa Fisica</label>
          </p>
          </div>

        <div id="juridica">
          <div class="form-group">
            <label class="control-label col-sm-2" for="txtRazaosocial">Razão Social: *</label>
            <div class="col-sm-9">
              <input type="text" class="form-control" id="txtRazaosocial" name="txtRazaosocial">
            </div>
          </div>

          <div class="form-group">
            <label class="control-label col-sm-2" for="txtNomefantasia">Nome Fantasia: *</label>
            <div class="col-sm-9">
              <input type="text" class="form-control" id="txtNomefantasia" name="txtNomefantasia">
            </div>
          </div>
          
           <div class="form-group">
            <label class="control-label col-sm-2" for="txtCnpj">CNPJ: *</label>
            <div class="col-sm-4">
              <input type="numbe" class="form-control cnpj" id="txtCnpj" name="txtCnpj">
            </div>

            <label class="control-label col-sm-1 " for="txtIe">I.E.: * </label>
            <div class="col-sm-4">
              <input type="text" class="form-control ie" id="txtIe" name="txtIe">
            </div>
          </div>
          </div>

          <div id="fisica" style="display:none;">
          <div class="form-group">
            <label class="control-label col-sm-2" for="txtNomePF">Nome: *</label>
            <div class="col-sm-9">
              <input type="text" class="form-control" id="txtNomePF" name="txtNomePF">
            </div>
          </div>
          
           <div class="form-group">
            <label class="control-label col-sm-2" for="txtCPF">CPF: *</label>
            <div class="col-sm-4">
              <input type="numbe" class="form-control cpf" id="txtCPF" name="txtCPF">
            </div>

            <label class="control-label col-sm-1 " for="txtRG">RG: * </label>
            <div class="col-sm-4">
              <input type="text" class="form-control rg" id="txtRG" name="txtRG" onkeypress="return SomenteNumero(event)">
            </div>
          </div>
          </div>

        <div class="form-group">
            <label class="control-label col-sm-2" for="txtEndereco">Endereço: *</label>
            <div class="col-sm-6">
              <input type="text" class="form-control" id="txtEndereco" name="txtEndereco">
            </div>

            <label class="control-label col-sm-1" for="txtNumero">Nº: *</label>
            <div class="col-sm-2">
              <input type="text" class="form-control" id="txtNumero" name="txtNumero" maxlength="10" onkeypress="return SomenteNumero(event)">
            </div>
          </div>

          <div class="form-group">
            <label class="control-label col-sm-2" for="txtComp">Complemento:</label>
            <div class="col-sm-3">
              <input type="text" class="form-control" id="txtComp" name="txtComp">
            </div>

            <label class="control-label col-sm-2" for="txtBairro">Bairro: *</label>
            <div class="col-sm-4">
              <input type="text" class="form-control" id="txtBairro" name="txtBairro">
            </div>
          </div>

          <div class="form-group">
            <label class="control-label col-sm-2" for="txtCep">CEP: *</label>
            <div class="col-sm-2">
              <input type="text" class="form-control" id="txtCep" name="txtCep">
            </div>

            <label class="control-label col-sm-2" for="txtCidade">Cidade: *</label>
            <div class="col-sm-3">
              <input type="text" class="form-control" id="txtCidade" name="txtCidade">
            </div>
          
          <label class="control-label col-sm-1" for="txtUf">UF: *</label>
            <div class="col-sm-1">
              <input type="text" class="form-control" id="txtUf" name="txtUf" maxlength="2">
            </div>
          </div>

          <div class="form-group">
            <label class="control-label col-sm-2" for="txtEmail">Email: *</label>
            <div class="col-sm-9">
              <input type="email" class="form-control" id="txtEmail" name="txtEmail">
            </div>
          </div>

          <div class="form-group">
            <label class="control-label col-sm-2" for="txtTel">Telefone: *</label>
            <div class="col-sm-9">
              <input class="tel form-control" id="txtTel" type="tel" name="txtTel">
            </div>
          </div>

          <div class="form-group">
            <label class="control-label col-sm-2" for="txtContato">Contato: *</label>
            <div class="col-sm-9">
              <input type="text" class="form-control" id="txtContato" name="txtContato">
            </div>
          </div>

          <p>DADOS DO SISTEMA</p>
          <div class="form-group">
            <label class="control-label col-sm-2" for="txtSistema">Sistema: *</label>
            <div class="col-sm-9">
              <input type="text" class="form-control" id="txtSistema" name="txtSistema" disabled="disabled">
            </div>
          </div>
           <div class="form-group">
            <label class="control-label col-sm-7" for="txtQtdadeusu">Quantidade de Usuarios que irão usar o sistema: *</label>
            <div class="col-sm-4">
              <input type="text" class="form-control" id="txtQtdadeusu" name="txtQtdadeusu" onkeypress="return SomenteNumero(event)">
            </div>
          </div>  

          <div class="form-group">
            <label class="control-label col-sm-2" for="Obs">Mensagem:</label>
            <div class="col-sm-9">
              <textarea rows="2" class="form-control" id="Obs" name="Obs" ></textarea>
            </div>
          </div>
            <div class="col-sm-12" align="right">
              <button type="submit" class="btn btn-primary btn-lg" id="btnContratar" onclick="return validarCont()">Contratar</button>
            </div>             
      </form>
      <br>
</div>  

`

@annyk seu problema está que vc está lendo o DOM e selecionado via ID:

Mas no seu HTML no radio é name e não tem id seus elementos. Duas alternativas, ou você add o id pros elementos ou troca no getElement por:

if(document.getElementsByName("juridica").checked == true){

Testa e dê um retorno. Uma dica saindo um pouco do contexto da solicitação, vc usa jQuery? E tentar usar validações de alguns plugins Jquery ou Bootstrap tbm é excelente p/ isto, fica mais bonito, performático e um código mais facil de dar manutenção.

Uso JQuery mas entendo pouco, bootstrap tb entendo pouco apesar de estar usando para fazer o site, não sabia que pelo bootstrap tem como fazer essas verificações.
Sou bem iniciante rs, vou me virando um pouco e fuçando na internet.

Vou alterar aqui e te retorno depois.

Dê uma olhada neste plugin, acho que irás gostar. http://formvalidation.io/examples/html5/

Muito legal este plugin vou usar futuramente, e não deu certo tem outra maneira de fazer o que estou querendo? essa não esta dando muito certo!

Posta o código com as alterações p/ analisar.

Ok vou postar!

o Formulario

`

<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog modal-lg">

  <!-- Modal content-->
  <div class="modal-content">
    <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal">&times;</button>
      <h4 class="modal-title">Aprovação Contrato de Prestação de Serviços</h4>
    </div>

  <div class="modal-body">
    <p>DADOS DO CONTRATANTE</p>

    <form action="enviarCont.php" class="form-horizontal" method="POST" name="frmCont" id="Contratar" enctype="multipart/form-data">
          
          <div align="center" class="form-group">
          <p>
           <label class="radio-inline col-sm-5"><input type="radio" name="juridica" value="juridica" onclick="pessoa(this.value);" id="jur" checked>Pessoa Juridica</label>
            <label class="radio-inline col-sm-5"><input type="radio" name="fisica" value="fisica" id="fis" onclick="pessoa(this.value);">Pessoa Fisica</label>
          </p>
          </div>

        <div id="juridica">
          <div class="form-group">
            <label class="control-label col-sm-2" for="txtRazaosocial">Razão Social: *</label>
            <div class="col-sm-9">
              <input type="text" class="form-control" id="txtRazaosocial" name="txtRazaosocial">
            </div>
          </div>

          <div class="form-group">
            <label class="control-label col-sm-2" for="txtNomefantasia">Nome Fantasia: *</label>
            <div class="col-sm-9">
              <input type="text" class="form-control" id="txtNomefantasia" name="txtNomefantasia">
            </div>
          </div>
          
           <div class="form-group">
            <label class="control-label col-sm-2" for="txtCnpj">CNPJ: *</label>
            <div class="col-sm-4">
              <input type="numbe" class="form-control cnpj" id="txtCnpj" name="txtCnpj">
            </div>

            <label class="control-label col-sm-1 " for="txtIe">I.E.: * </label>
            <div class="col-sm-4">
              <input type="text" class="form-control ie" id="txtIe" name="txtIe">
            </div>
          </div>
          </div>

          <div id="fisica" style="display:none;">
          <div class="form-group">
            <label class="control-label col-sm-2" for="txtNomePF">Nome: *</label>
            <div class="col-sm-9">
              <input type="text" class="form-control" id="txtNomePF" name="txtNomePF">
            </div>
          </div>
          
           <div class="form-group">
            <label class="control-label col-sm-2" for="txtCPF">CPF: *</label>
            <div class="col-sm-4">
              <input type="numbe" class="form-control cpf" id="txtCPF" name="txtCPF">
            </div>

            <label class="control-label col-sm-1 " for="txtRG">RG: * </label>
            <div class="col-sm-4">
              <input type="text" class="form-control rg" id="txtRG" name="txtRG" onkeypress="return SomenteNumero(event)">
            </div>
          </div>
          </div>

        <div class="form-group">
            <label class="control-label col-sm-2" for="txtEndereco">Endereço: *</label>
            <div class="col-sm-6">
              <input type="text" class="form-control" id="txtEndereco" name="txtEndereco" required>
            </div>

            <label class="control-label col-sm-1" for="txtNumero">Nº: *</label>
            <div class="col-sm-2">
              <input type="text" class="form-control" id="txtNumero" name="txtNumero" maxlength="10" onkeypress="return SomenteNumero(event)" required>
            </div>
          </div>

          <div class="form-group">
            <label class="control-label col-sm-2" for="txtComp">Complemento:</label>
            <div class="col-sm-3">
              <input type="text" class="form-control" id="txtComp" name="txtComp">
            </div>

            <label class="control-label col-sm-2" for="txtBairro">Bairro: *</label>
            <div class="col-sm-4">
              <input type="text" class="form-control" id="txtBairro" name="txtBairro" required>
            </div>
          </div>

          <div class="form-group">
            <label class="control-label col-sm-2" for="txtCep">CEP: *</label>
            <div class="col-sm-2">
              <input type="text" class="form-control" id="txtCep" name="txtCep" required>
            </div>

            <label class="control-label col-sm-2" for="txtCidade">Cidade: *</label>
            <div class="col-sm-3">
              <input type="text" class="form-control" id="txtCidade" name="txtCidade" required>
            </div>
          
          <label class="control-label col-sm-1" for="txtUf">UF: *</label>
            <div class="col-sm-1">
              <input type="text" class="form-control" id="txtUf" name="txtUf" maxlength="2" required>
            </div>
          </div>

          <div class="form-group">
            <label class="control-label col-sm-2" for="txtEmail">Email: *</label>
            <div class="col-sm-9">
              <input type="email" class="form-control" id="txtEmail" name="txtEmail" required>
            </div>
          </div>

          <div class="form-group">
            <label class="control-label col-sm-2" for="txtTel">Telefone: *</label>
            <div class="col-sm-9">
              <input class="tel form-control" id="txtTel" type="tel" name="txtTel" required>
            </div>
          </div>

          <div class="form-group">
            <label class="control-label col-sm-2" for="txtContato">Contato: *</label>
            <div class="col-sm-9">
              <input type="text" class="form-control" id="txtContato" name="txtContato" required>
            </div>
          </div>

          <p>DADOS DO SISTEMA</p>
          <div class="form-group">
            <label class="control-label col-sm-2" for="txtSistema">Sistema: *</label>
            <div class="col-sm-9">
              <input type="text" class="form-control" id="txtSistema" name="txtSistema" disabled="disabled" required>
            </div>
          </div>
           <div class="form-group">
            <label class="control-label col-sm-7" for="txtQtdadeusu">Quantidade de Usuarios que irão usar o sistema: *</label>
            <div class="col-sm-4" required>
              <input type="text" class="form-control" id="txtQtdadeusu" name="txtQtdadeusu" onkeypress="return SomenteNumero(event)" required>
            </div>
          </div>  

          <div class="form-group">
            <label class="control-label col-sm-2" for="Obs">Mensagem:</label>
            <div class="col-sm-9">
              <textarea rows="2" class="form-control" id="Obs" name="Obs" ></textarea>
            </div>
          </div>
            <div class="col-sm-12" align="right">
              <button type="submit" class="btn btn-primary btn-lg" id="btnContratar" onclick="return validarCont()">Contratar</button>
            </div>             
      </form>
      <br>
</div>  
    <!--fim body-->

    <div class="modal-footer">
      <p>Smart Sistemas</p>
    </div>
  </div>
  </div>
</div>
`

O JS para mostrar as div

`

   <script>
    function pessoa(tipo){
      if(tipo=="fisica"){
        document.getElementById("fisica").style.display = "inline";
        document.getElementById("juridica").style.display = "none";
           document.getElementById("jur").checked = false;

      }else if(tipo=="juridica"){
        document.getElementById("fisica").style.display = "none";
        document.getElementById("juridica").style.display = "inline";
          document.getElementById("fis").checked = false;
      }
    }
  </script>`

e a Validação que estou fazendo ao clicar no contratar

`

           <!-- Validação Contratar-->
      <script language="javascript" type="text/javascript">
        function validarCont() {
          var txtEndereco = frmCont.txtEndereco.value;
          var txtNumero = frmCont.txtNumero.value;
          var txtBairro = frmCont.txtBairro.value;
          var txtCep = frmCont.txtCep.value;
          var txtCidade = frmCont.txtCidade.value;
          var txtUf = frmCont.txtUf.value;
          var txtEmail = frmCont.txtEmail.value;
          var txtTel = frmCont.txtTel.value;
          var txtContato = frmCont.txtContato.value;
          var txtSistema = frmCont.txtSistema.value;
          var txtQtdadeusu = frmCont.txtQtdadeusu.value;

      var txtNomefantasia = frmCont.txtNomefantasia.value;
      var txtRazaosocial = frmCont.txtRazaosocial.value;
      var txtCnpj = frmCont.txtCnpj.value;
      var txtIe = frmCont.txtIe.value;

      var txtNome = frmCont.txtNome.value;
      var txtCPF = frmCont.txtCPF.value;
      var txtRG = frmCont.txtRG.value;


      if(document.getElementById("jur").checked == true){
          if (txtRazaosocial == ""){
            alert('Preencha o campo Razão Social');
            frmCont.txtRazaosocial.focus();
            return false;
            } else if (txtNomefantasia == ""){
            alert('Preencha o campo Nome Fantasia!');
            frmCont.txtNomefantasia.focus();
            return false;
            } else if (txtCnpj == ""){
            alert('Preencha o campo CNPJ!');
            frmCont.txtCnpj.focus();
            return false;
            } else if (txtIe == ""){
            alert('Preencha o camp o Inscrição Estadual!');
            frmCont.txtIe.focus();
            return false;
            }
          } else if(document.getElementById("fis").checked == true){
              if (txtNome == ""){
            alert('Preencha o campo Nome');
            frmCont.txtNome.focus();
            return false;
            } else if (txtCPF == ""){
            alert('Preencha o campo CPF');
            frmCont.txtCPF.focus();
            return false;
            } else if (txtRG == ""){
            alert('Preencha o campo RG!');
            frmCont.txtRG.focus();
            return false;
            }
          }

           if (txtEndereco == ""){
            alert('Preencha o campo Endereço!');
            frmCont.txtEndereco.focus();
            return false;
            } else if (txtNumero == ""){
            alert('Preencha o campo Número');
            frmCont.txtNumero.focus();
            return false;
          } else if (txtBairro == ""){
            alert('Preencha o campo Bairro');
            frmCont.txtBairro.focus();
            return false;
          } else if (txtCep == ""){
            alert('Preencha o campo CEP');
            frmCont.txtCep.focus();
            return false;
          } else if (txtCidade == ""){
            alert('Preencha o campo Cidade');
            frmCont.txtCidade.focus();
            return false;
          } else if (txtUf == ""){
            alert('Preencha o campo UF');
            frmCont.txtUf.focus();
            return false;
          } else if (txtEmail == ""){
            alert('Preencha o campo e-mail!');
            frmCont.txtEmail.focus();
            return false;
          }else if (txtContato == ""){
            alert('Preencha o campo Contato!');
            frmCont.txtContato.focus();
            return false;
          }else if (txtSistema == ""){
            alert('Preencha o campo Sistema!');
            frmCont.txtSistema.focus();
            return false;
          }else if (txtQtdadeusu == ""){
            alert('Preencha o campo Qtdadeusu!');
            frmCont.txtQtdadeusu.focus();
            return false;
          }
        }
      </script>`

Esse script está dando erro:

TypeError: frmCont.txtNome is undefined

Corrija p/ os elementos que você quer e ao tentar realizar o teste abre o console do browser e começa executar, p/ ver se não há mais nenhum erro. E na condição vc está checando os ultimos campos no formulario por primeiro. Tem que ser tipo:

if(fisica){
     verificar somente campos da div fisica
}else{
     verificar somente campos da div juridica
}
agora sim verificar os campos em comum

Consegui, não sabia que dava pra ver os erros no console.
Verifiquei e no caso era o nome do campo que estava incorreto.
So coloquei ele corretamente e funcionou.

Muito obrigada pela ajuda e paciência rs

Que isto, fico feliz em poder ajudar. :wink:

1 curtida