Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Validando formulário dinamico


acborba

Pergunta

Galera estou tentando validar um formulário (questionário) dinamico mas não estou conseguindo. segue o scritp:

</style>
&lt;script type="text/JavaScript">
<!--
function checkRadio(){

    var inputs = document.getElementsByTagName( 'input' );
    for(var x=0; x < inputs.length; x++){
            
            if ( inputs[x].type == "radio" ){
                if(inputs[x].checked==true){
                    alert("Enviando respostas")
                    document.frm.submit()
                        
                }//if
                else{
                alert("Todos as opções devem ser selecionadas!")
                windown.location= "questionario1.php"
                   }//else
                    
          }//if
    }//for
} //function
<div id=geral>
  <?
$grupo = mysql_query("SELECT DISTINCT g.grupo,g.idgrupo,p.grupo_idGrupo FROM grupo as g 
INNER JOIN pergunta as p WHERE g.questionario_idquestionario='$idquest' AND g.idGrupo=p.grupo_idGrupo" );
$qtd_grupo = mysql_num_rows($grupo);
for ($x=1; $x<=$qtd_grupo; $x++)
{
$reg_grupo=mysql_fetch_assoc($grupo);
$idgrupo = $reg_grupo[idgrupo];
?>
  <table width="100%" border="0" align="center">
    <td><span class="style3">Grupo: <? echo $reg_grupo[grupo];?> </span></td>
    </tr>
  </table>
  <p> </p>
  <?
$perg = mysql_query("SELECT pergunta,idPergunta FROM pergunta WHERE grupo_idGrupo='$idgrupo'");
$qtd_perg = mysql_num_rows($perg);
for ($i=1; $i<=$qtd_perg; $i++)
{
$reg_perg=mysql_fetch_assoc($perg);
?>
  <table width="100%" border="0">
    <tr>
      <td><? echo $i.' - '; echo $reg_perg[pergunta]; ?> </td>
    </tr>
  </table>
  <table width="200">
    <tr>
      <td><label>
        <input type="radio" name="opcao[<?=$reg_grupo[idgrupo]?>][<?=$reg_perg[idPergunta]?>]" value=5 />
        Muito Safisfeito</label></td>
    </tr>
    <tr>
      <td><label>
        <input type="radio" name="opcao[<?=$reg_grupo[idgrupo]?>][<?=$reg_perg[idPergunta]?>]"  value=4 />
        Satisfeito</label></td>
    </tr>
    <tr>
      <td><label>
        <input type="radio" name="opcao[<?=$reg_grupo[idgrupo]?>][<?=$reg_perg[idPergunta]?>]"  value=3 />
        Pouco Satisfeito</label></td>
    </tr>
    <tr>
      <td><label>
        <input type="radio" name="opcao[<?=$reg_grupo[idgrupo]?>][<?=$reg_perg[idPergunta]?>]"  value=2 />
        Insatisfeito</label></td>
    </tr>
    <tr>
      <td><label>
        <input type="radio" name="opcao[<?=$reg_grupo[idgrupo]?>][<?=$reg_perg[idPergunta]?>]"  value=1 />
        Muito Insatisfeito</label></td>
    </tr>
    <tr>
      <td><label>
        <input type="radio" name="opcao[<?=$reg_grupo[idgrupo]?>][<?=$reg_perg[idPergunta]?>]"  value=0 />
        Não Se Aplica</label></td>
    </tr>
  </table>
  <p> </p>
<? 
} 
}
?>
  <input type="hidden" name="idquest" value="<? echo $idquest;?>" />
  <input type="hidden" name="matricula" value="<? echo $matricula;?>" />
  <table width="100%" border="0">
  <tr>
    <td>Elogios/Sugestões/Reclamações:</td>
  </tr>
  <tr>
    <td><textarea name="comentario" cols="69" rows="6"></textarea></td>
  </tr>
</table>
<table width="200" border="0" class="teste">
    <tr>
      <td><input type="submit" name="Submit" value="Fechar" onclick="self.close()"/></td>
      <td><input type="submit" value="Enviar" </td>
    </tr>
  </table>
  <p>&nbsp;</p>
</div>

Editado por acborba
Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

i aew acborba, bom o erro ta na sua condição, segue a linha:

if ( inputs[x].type == "radio" ){

você está perguntado se todos as suas tags inputs são do tipo radio, e como não são vai sempre entrar na condição else,

pois você tem 2 campos hidden e 2 submit.

espero que ajude abraço!

Editado por Romerito
Link para o comentário
Compartilhar em outros sites

  • 0
i aew acborba, bom o erro ta na sua condição, segue a linha:

if ( inputs[x].type == "radio" ){

você está perguntado se todos as suas tags inputs são do tipo radio, e como não são vai sempre entrar na condição else,

pois você tem 2 campos hidden e 2 submit.

espero que ajude abraço!

E de que forma eu poderia contornar esta situação?

Link para o comentário
Compartilhar em outros sites

  • 0

Como o Romerito disse, o código busca apenas pelo primeiro input (que é do tipo submit) para fazer a verificação

Tente assim:

var inputs = document.getElementsByTagName( 'input' );
var valor=false
for(var x=0; x < inputs.length; x++){
if (inputs[x].type == "radio" ){
if(inputs[x].checked==true){
valor=true
break
}
}
}
if (valor){
alert("Enviando respostas")
document.frm.submit()
}else{
alert("Todos as opções devem ser selecionadas!")
location= "questionario1.php"
}

Link para o comentário
Compartilhar em outros sites

  • 0
Como o Romerito disse, o código busca apenas pelo primeiro input (que é do tipo submit) para fazer a verificação

Tente assim:

var inputs = document.getElementsByTagName( 'input' );
var valor=false
for(var x=0; x < inputs.length; x++){
if (inputs[x].type == "radio" ){
if(inputs[x].checked==true){
valor=true
break
}
}
}
if (valor){
alert("Enviando respostas")
document.frm.submit()
}else{
alert("Todos as opções devem ser selecionadas!")
location= "questionario1.php"
}
Cara funcionou em partes. Quando eu tento dar o submit do form vazio ele funciona beleza mas quando eu seleciono uma das opções ele envia. Mas tem que todas as opções estarem selecionadas. Tentei varrear um array desta forma mas não esta nem chamando o script:
var inputs = document.getElementsByTagName( 'input' );
var valor = new array();
    for(var x=0; x < inputs.length; x++){
        if (inputs[x].type == "radio" ){
            if(inputs[x].checked==true){
            valor[x] = 1;
                break
            }else{
                valor[x] = 0;
            }
        }
    }
    teste=1;
    for(a=0;a<valor.length; a++){
        if(valor[a] == 0){
            teste = 0;
        }
    }
        if (teste==1){
            alert("Enviando respostas")
            document.frm.submit()
        }else{
            alert("Todos as opções devem ser selecionadas!")
        //    window.location= "questionario1.php"
        }
}

alguém sabe o que tem de errado?

Link para o comentário
Compartilhar em outros sites

  • 0
acborba, posta seu form pra gente poder ver como ele está!

Na verdade não é um form :rolleyes:

<div id=geral>
  <?
$grupo = mysql_query("SELECT DISTINCT g.grupo,g.idgrupo,p.grupo_idGrupo FROM grupo as g
INNER JOIN pergunta as p WHERE g.questionario_idquestionario='$idquest' AND g.idGrupo=p.grupo_idGrupo" );
$qtd_grupo = mysql_num_rows($grupo);
for ($x=1; $x<=$qtd_grupo; $x++)
{
$reg_grupo=mysql_fetch_assoc($grupo);
$idgrupo = $reg_grupo[idgrupo];
?>
  <table width="100%" border="0" align="center">
    <td><span class="style3">Grupo: <? echo $reg_grupo[grupo];?> </span></td>
    </tr>
  </table>
  <p> </p>
  <?
$perg = mysql_query("SELECT pergunta,idPergunta FROM pergunta WHERE grupo_idGrupo='$idgrupo'");
$qtd_perg = mysql_num_rows($perg);
for ($i=1; $i<=$qtd_perg; $i++)
{
$reg_perg=mysql_fetch_assoc($perg);
?>
  <table width="100%" border="0">
    <tr>
      <td><? echo $i.' - '; echo $reg_perg[pergunta]; ?> </td>
    </tr>
  </table>
  <table width="200">
    <tr>
      <td><label>
        <input type="radio" name="opcao[<?=$reg_grupo[idgrupo]?>][<?=$reg_perg[idPergunta]?>]" value=5 />
        Muito Safisfeito</label></td>
    </tr>
    <tr>
      <td><label>
        <input type="radio" name="opcao[<?=$reg_grupo[idgrupo]?>][<?=$reg_perg[idPergunta]?>]"  value=4 />
        Satisfeito</label></td>
    </tr>
    <tr>
      <td><label>
        <input type="radio" name="opcao[<?=$reg_grupo[idgrupo]?>][<?=$reg_perg[idPergunta]?>]"  value=3 />
        Pouco Satisfeito</label></td>
    </tr>
    <tr>
      <td><label>
        <input type="radio" name="opcao[<?=$reg_grupo[idgrupo]?>][<?=$reg_perg[idPergunta]?>]"  value=2 />
        Insatisfeito</label></td>
    </tr>
    <tr>
      <td><label>
        <input type="radio" name="opcao[<?=$reg_grupo[idgrupo]?>][<?=$reg_perg[idPergunta]?>]"  value=1 />
        Muito Insatisfeito</label></td>
    </tr>
    <tr>
      <td><label>
        <input type="radio" name="opcao[<?=$reg_grupo[idgrupo]?>][<?=$reg_perg[idPergunta]?>]"  value=0 />
        Não Se Aplica</label></td>
    </tr>
  </table>
  <p> </p>
<?
}
}
?>
  <input type="hidden" name="idquest" value="<? echo $idquest;?>" />
  <input type="hidden" name="matricula" value="<? echo $matricula;?>" />
  <table width="100%" border="0">
  <tr>
    <td>Elogios/Sugestões/Reclamações:</td>
  </tr>
  <tr>
    <td><textarea name="comentario" cols="69" rows="6"></textarea></td>
  </tr>
</table>
<table width="200" border="0" class="teste">
    <tr>
      <td><input type="submit" name="Submit" value="Fechar" onclick="self.close()"/></td>
      <td><input type="submit" value="Enviar" </td>
    </tr>
  </table>
  <p>&nbsp;</p>
</div>

Link para o comentário
Compartilhar em outros sites

  • 0

bom, tenta isso aqui acborba:

var inps   = document.getElementsByTagName( 'input' );
    var totRdo = 0;
    var rdo = new Array();
    for ( var i = 0; i < inps.length; i++ )
    {
        if ( inps[i].type == 'radio' )
            rdo[totRdo++] = inps[i];
    }
    var j = 0;
    for ( i = 0; i < ( rdo.length / 6 ); i++ )
    {
        var s = false;
        var cond = ( j ) ? ( j + 6 ) : 6;
        for (; j < cond; j++ )
        {
            if ( rdo[j].checked == true )
                s = true;
        }
        if( !s )
        {
            alert( "Todos as opções devem ser selecionadas!" );
            window.location= "questionario1.php";
            return false;
        }        
    }
     alert( "Enviando respostas" );
     document.frm.submit();

espero que ajude!

Editado por Romerito
Link para o comentário
Compartilhar em outros sites

  • 0

Cara ta quase :D só q ainda tem um problema :huh: nesta parte:

if( !s )
        {
            alert( "Todos as opções devem ser selecionadas!" );
            window.location= "questionario1.php";
            return false;
        }

Se eu deixo como está ele não deixa eu dar o submit sem ter selecionado ao menos uma opção e recarrega a página, beleza. O problema é que como é dinamico eu perco todas as informações da página ficando apenas o combo sugestões (que não é estático).

Se eu removo a linha window.location= "questionario1.php"; ele não deixa eu dar o submit, beleza. Mas se tiver alguma opção selecionada ele entra no if da a mesagem e para. Mas não sei porque ele ainda envia os campos para outra pagina inserindo no banco.

Não sei se tu entendeu.

Link para o comentário
Compartilhar em outros sites

  • 0

não entende sahushu, o padrão é se está certo envia, senão não envia, se tu comentar a linha de location ele não envia

, não está certo?

não entende o que você quer que ele faça caso não esteje preenchido certo!

estou meio burraldo hoje shaushashu! :wacko:

Link para o comentário
Compartilhar em outros sites

  • 0
não entende sahushu, o padrão é se está certo envia, senão não envia, se tu comentar a linha de location ele não envia

, não está certo?

não entende o que você quer que ele faça caso não esteje preenchido certo!

estou meio burraldo hoje shaushashu! :wacko:

hahaha

É assim:

Do jeito que está quando deixo algo em branco ele da a mensagem "Todos as opções devem ser selecionadas!"

e redireciona a pagina para ela mesma mas todos os campos somem (porque os campos veem do banco).

Comentando a linha do redirecionamento ele insere no banco (caso algum campo tenha sido selecionado)

mas não vai para a outra pagina, apenas da a mensagem "Todos as opções devem ser selecionadas!".

Ele ter que dar a mensagem caso algum campo esteja em branco e ao clicar no botão do alert,

ou recarregar todo o formulário (acho o meio mais dificil) ou não fazer nada após o botão.

Só trocar de pagina se todos os campos forem preenchidos.

Link para o comentário
Compartilhar em outros sites

  • 0

bom se pelo que entende você precisa fazer nada ou recaregar a mesma caso os campos não estejam preenchidos corretamente:

bom para recarregar a pagina subistitua a linha:

window.location= "questionario1.php";
por está:
document.location.reload();

para fazer nada, apenas comente a linha citada acima e de um return;

Link para o comentário
Compartilhar em outros sites

  • 0
bom se pelo que entende você precisa fazer nada ou recaregar a mesma caso os campos não estejam preenchidos corretamente:

bom para recarregar a pagina subistitua a linha:

window.location= "questionario1.php";
por está:
document.location.reload();

para fazer nada, apenas comente a linha citada acima e de um return;

Graaaande Romerito!!!

Resolvido era isso mesmo.

Muito Obrigado :lol:

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...