none
Variáveis Dinâmicas na SP RRS feed

  • Pergunta

  • Bom Dia pessoal;

    Estou com uma dúvida, será que alguém poderia me ajudar?

    Eu tenho um formulário de uma enquete para ser respondido. As perguntas são relacionadas a uma disciplina do ensino fundamental. O formulário é dinâmico e vem do banco de dados.

    Gostaria de saber como declarar como parâmetro da procedure uma variável dinâmica.

     

    Segue o código para que possam entender melhor:

    --Página do Formulário-- 

    <form id="habilidade" name="habilidade" method="post" action="cbc_salvar.asp">
          <% disciplina = request.Form("disciplina")%>
     <%
     Set cbc_questoes=Conn.execute("S_LISTA_HABILIDADE @id_disciplina="&disciplina)
     %>
     
    <table width="80%" border="1"  cellspacing="0" align="center">
    <tr>
         <td width=25%" align="center"><b><font face="Helvetica" size="2" >TÓPICO</font></b></td>
                        <td width=55%" align="center"><b><font face="Helvetica" size="2" >HABILIDADE</font></b></td>
                        <td align="center"><b><font face="Helvetica" size="2" >6</font></b>                    </td>
                        <td align="center"><b><font face="Helvetica" size="2" >7</font></b>                    </td>
                        <td align="center"><b><font face="Helvetica" size="2" >8</font></b>                    </td>
                        <td align="center"><b><font face="Helvetica" size="2" >9</font></b>                    </td>
        <%
      dim cont
      cont=0
      dim hab_hidden
     %>         
        <% Do While not cbc_questoes.eof %>
                      <tr>
         <td width=15%" align="center"><font face="Helvetica" size="2" >
         <%=cbc_questoes("numero_topico")%>. <%=cbc_questoes("topico")%></font>                    </td>
                            
         <td width="55%" align="center"><font face="Helvetica" size="2" ><%=cbc_questoes("completo_habilidade")%>. <%=cbc_questoes("habilidade")%></font></b>                    </td>
                             <td align="center"><font face="Helvetica" size="2" >
         </font>
                               <label></label>
                               <label></label>
                               </b>
                               <label>
                               <input name="ano_<%=cont%>" type="radio" id="ano_<%=cont%>" value="6">
                               </label></td>
                        <td align="center"><font face="Helvetica" size="2" >
         </font>
                          <label></label>
                          <label>
                           <input name="ano_<%=cont%>" type="radio" id="ano_<%=cont%>" value="7">
                          </label>
                          </b>
         <label></label></td>
                        <td align="center"><font face="Helvetica" size="2" >
         </font>
                          <label></label>
                          <label>
                           <input name="ano_<%=cont%>" type="radio" id="ano_<%=cont%>" value="8">
                          </label>
                          </b>
                        <label></label></td>
                        <td align="center"><font face="Helvetica" size="2" >
         </font>
                          <label></label>
                          <label> <input name="ano_<%=cont%>" type="radio" id="ano_<%=cont%>" value="9">
                          </label>
                          </b>
                        <label></label></td>
                        <td align="center" style="visibility:hidden"><%=cbc_questoes("id_habilidade")%></td>
                     <% cont= cont+1%> 
                    <%
        cbc_questoes.movenext
        Loop %>

     

    --A página que salva--

    <form name="form1" method="post" action="">

     <% cont= request.Form("cont")

    cont2 = 0
       Do While cont2 < cont
      ano_ = request.Form("ano_"&cont)
         id_habilidade = request.Form("id_habilidade"&cont)
      set cbc_salvar = conn.execute("S_INSERE_ENQUETE_CBC @id_habilidade='"&id_habilidade&"', @ano="&ano_) 
      
      cont2 = cont2 + 1
         cbc_salvar.movenext
       Loop
    %>

    -----------------------------------------------------------------------------------------

    A variável que recebe o ano_ é dinâmica (ano_<%=cont%>), visto que dentro do while ela recebe um valor diferente a cada passagem.

    Como eu coloco essa variável dinâmica na procedure para dar certo. Ou tem outra maneira de fazer?

     

    Obrigada

    segunda-feira, 3 de maio de 2010 12:17

Respostas

  • Paloma creio que esteja quase correto, porém você não está buscando o campo pelo javascript, acho que deveria ser algo assim:

    <script language="javascript" type="text/javascript">
    <!--
    function confere(){
        for (i=0; i<=<%=cont%>; i++){
        ano = "ano_<%=cont%>"

        var elemento = document.getElementById(ano);   
        if (elemento.checked == false) {
            alert("formulario enviado com sucesso");
            return true;
              
        }
        else {
        alert("Há campos em branco!");
            return false;  
           
        }
    }
    }
    //-->
    </script>

     

    Segue um exemplo abaixo para lhe ajudar.

    <html>
    <head>
        <script type="text/javascript">
            function validar()
            {
                var elemento1 = document.getElementById("abc1");
                var elemento2 = document.getElementById("abc2");
                if ( elemento1.checked == true )
                {
                    alert("Elemento 1 selecionado");
                }
                else
                {
                    alert("Elemento 1 não selecionado");
                }
                   
                if ( elemento2.checked == true )
                {
                    alert("Elemento 2 selecionado");
                }
                else
                {
                    alert("Elemento 2 não selecionado");
                }
                return window.confirm("Deseja enviar o form?");
            }
        </script>
    </head>
    <body>
        <form action="" method="post" onsubmit="return validar();">
            <input type="radio" name="abc" id="abc1" value="1" />Elemento 1</br>
            <input type="radio" name="abc" id="abc2" value="2" />Elemento 2</br>
            <input type="submit" value="Enviar" />
        </form>
    </body>
    </html>

     

    Abraço

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    • Marcado como Resposta Paloma.ST quinta-feira, 6 de maio de 2010 12:07
    quarta-feira, 5 de maio de 2010 12:36

Todas as Respostas

  • Paloma, poderia explicar melhor o que esta tentando realizar?
    Você quer alterar o nome da variável dinamicamente?
    Colocar variavel em qual procedure, por favor explique melhor?

     

    Abraço

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    segunda-feira, 3 de maio de 2010 12:34
  • Olá Estevam;

     

    o valor da minha variável ano é dinâmico, variando de acordo com o valor do cont dentro do while:

     

    ano_<%=cont%>

     

    E eu preciso colocar ela como parâmetro da minha sp que salva os valores marcados no banco. Segue a procedure:

     set cbc_salvar = conn.execute("S_INSERE_ENQUETE_CBC @id_habilidade='"&id_habilidade&"', @ano="&ano_)

     

    Ela tem como parâmetro necessário o ano.

    Mas, se eu colocar o nome da variável como ela está declarada dá erro.

    Pode me ajudar por favor?

     

    Abraços

     

    segunda-feira, 3 de maio de 2010 12:43
  • Paloma, veja seu código abaixo, creio que o erro que esteja ocorrendo seja um erro de código mesmo, repare que no While você faz uma verificação do "cont2" com o "cont" porém no momento do Request.Form você utiliza o "cont", porém como esta variável não esta sendo incrementado fica em um valor fixo e sempre buscando um campo inexistente.

    Altere o código abaixo:

    <% cont= request.Form("cont")

    cont2 = 0
       Do While cont2 < cont
      ano_ = request.Form("ano_"&cont)
         id_habilidade = request.Form("id_habilidade"&cont)
      set cbc_salvar = conn.execute("S_INSERE_ENQUETE_CBC @id_habilidade='"&id_habilidade&"', @ano="&ano_) 
      
      cont2 = cont2 + 1
         cbc_salvar.movenext
       Loop
    %>

     

    Para:

     

    <% cont= request.Form("cont")

    cont2 = 0
       Do While cont2 < cont
      ano_ = request.Form("ano_"&cont2)
         id_habilidade = request.Form("id_habilidade"&cont2)
      set cbc_salvar = conn.execute("S_INSERE_ENQUETE_CBC @id_habilidade='"&id_habilidade&"', @ano="&ano_) 
      
      cont2 = cont2 + 1
         cbc_salvar.movenext
       Loop
    %>

     

    De der erro, por favor envie o erro.

    Abraço

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    segunda-feira, 3 de maio de 2010 13:03
  • Luiz;

     

    Não deu erro nenhum. Apenas não salva.

    Não seria mesmo pelo nome diferente da variável na procedure?

     

    Não consigo encontrar o 'problema'.

     

    Obg

    segunda-feira, 3 de maio de 2010 13:13
  • Paloma não sei como esta sua procedure, mas acho que você deveria passar as váriaveis assim, pelo menos é como costumo fazer.

    conn.execute("S_INSERE_ENQUETE_CBC '" & id_habilidade & "', " & ano_ )

    Se quiser pode também tentar converter o ano para int.

    conn.execute("S_INSERE_ENQUETE_CBC '" & id_habilidade & "', " & CInt(ano_) )

     

    Verifique se a ordem de entrada dos parâmetros esta correta para procedure e se os tipos de dados estão batendo também, pois pelo que você descreveu a procedure aparentemente esta sendo executada pelo ASP, porém internamente no SQL não, pode ser também por existir algum IF dentro da procedure, no qual os parâmetros passados não conferem.

     

    Abraço

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    segunda-feira, 3 de maio de 2010 13:38
  • Luiz,

    Agora está guardando no banco.

     

    Mais escreve um erro na página:

     

    Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near '='.

     

    A linha da referência é a da procedure:

    set cbc_salvar=conn.execute("S_INSERE_ENQUETE_CBC @id_habilidade="&id_habilidade&", @ano="&ano)

     

    Sabe o q poderia ser?

     

    Abç

    segunda-feira, 3 de maio de 2010 14:31
  • Paloma,

    Você conseguiu inserir os dados utilizando qual meio de execução o seu ou os que lhe enviei?

    Pelo erro que foi passado é que o SQL não esta reconhecendo os sinais de igual (=) passados como parâmetros para a procedure, por isso lhe enviei as abaixo:

    conn.execute("S_INSERE_ENQUETE_CBC '" & id_habilidade & "', " & ano_ )

     

    Abraço

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    segunda-feira, 3 de maio de 2010 14:44
  • Estevam;

     

    Deu a mesma coisa. Só mudou o caractere

    Erro:

    Incorrect syntax near ','.

     

    Linha:

    set Cbc_salvar=conn.execute("S_INSERE_ENQUETE_CBC '" & id_habilidade & "', " & ano)

     

    Abç

    segunda-feira, 3 de maio de 2010 15:03
  • Paloma, acho que este erro aconteceu porque a variavel que passei estava errada, trazendo um valor nulo, tente com esta.

    set Cbc_salvar=conn.execute("S_INSERE_ENQUETE_CBC '" & id_habilidade & "', " & ano_ )

    Executando a procedure direto no banco funciona normal, certo?

     

    Abraço

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    segunda-feira, 3 de maio de 2010 16:12
  • Ola Luiz;

     

    O problema na verdade não era com a procedure.

    Era no while. Mas agora está tudo certo.

     

    WLw, pela ajuda.

     

    Agora eu tenho outro problema na vdd.

     

    Estou usando um javascript para verificar se todos os campos do meu formulário foram

    preenchidos.

    Mas não está funcionando.

     

    Poderia me ajudar?

     

    --Página do Formulário--

     

    <%  Set Conn = Server.CreateObject("ADODB.Connection")
        Conn.Open Session("ConnectionString") %>
    <html>
    <head>
        <title>:: Enquete - CRV ::</title>
    </head>
    <body>
        <form id="habilidade" name="habilidade" method="post" action="cbc_salvar.asp">
          <p>
            <% disciplina = request.Form("disciplina")%>
            <%Set cbc_questoes=Conn.execute("S_LISTA_HABILIDADE @id_disciplina="&disciplina)%>
    </p>
          <p>Selecione o ano que voc&ecirc; acha que pertence a habilidade: </p>
          <table width="80%" border="1"  cellspacing="0" align="center">
    <tr>    
                        <td width=25%" align="center"><b><font face="Helvetica" size="2" >TÓPICO</font></b></td>
                        <td width=55%" align="center"><b><font face="Helvetica" size="2" >HABILIDADE</font></b></td>
                        <td align="center"><b><font face="Helvetica" size="2" >6</font></b>                    </td>
                        <td align="center"><b><font face="Helvetica" size="2" >7</font></b>                    </td>
                        <td align="center"><b><font face="Helvetica" size="2" >8</font></b>                    </td>
                        <td align="center"><b><font face="Helvetica" size="2" >9</font></b>                    </td>
        <%
            dim cont
            cont=0
        %>         
        <% Do While not cbc_questoes.eof %>
    <% cont= cont+1%>
                      <tr>
                        <td width="15%" align="justify"><font face="Helvetica" size="2" >
                        <%=cbc_questoes("numero_topico")%>. <%=cbc_questoes("topico")%></font>                    </td>
                               <td align=align="justify"><font face="Helvetica" size="2" ><input name="id_habilidade_<%=cont%>" type="hidden" id="id_habilidade_<%=cont%>" value="<%=cbc_questoes("id_habilidade")%>"><%=cbc_questoes("completo_habilidade")%>. <%=cbc_questoes("habilidade")%></font></td>            
                        <td align="center"><font face="Helvetica" size="2" ></font></b>                    <label></label>
                                              <label></label>
                                              </b>
                                              <label>
                                              <input name="ano_<%=cont%>" type="radio" id="ano_<%=cont%>" value="6">
                                              </label></td>
                                            <td align="center"><font face="Helvetica" size="2" >
                        </font>
                                              <input name="ano_<%=cont%>" type="radio" id="ano_<%=cont%>2" value="7"></td>
                        <td align="center"><font face="Helvetica" size="2" >
                        </font>
                          <label></label>
                          <label></label>
                          <input name="ano_<%=cont%>" type="radio" id="ano_<%=cont%>3" value="8">
                          </b>
                        <label></label></td>
                        <td align="center"><font face="Helvetica" size="2" >
                        </font>
                          <label></label>
                          <label></label>
                          </b>
                          <input name="ano_<%=cont%>" type="radio" id="ano_<%=cont%>4" value="9">
                        <label></label></td>
                    <%
                    cbc_questoes.movenext
                    Loop %>
        </table>
      <label></label>
      <label></label>
      <input name="cont" type="hidden" id="cont" value="<%=cont%>">
      <table width="200" border="0" align="center">
      <tr>
        <td><div align="center">
          <input type="submit" name="salvar" id="salvar" value="Salvar" onClick="confere()">
        </div></td>
        <td>
        <div align="center">
          <input type="reset" name="limpar" id="limpar" value="Limpar">
        </div></td>
      </tr>
    </table>
    </form>
    </body>
    </html>
    <script language="javascript" type="text/javascript">
    <!--
    function confere(){
        for (i=0; i<=cont; i++){

        ano_<%=cont%> = document.habilidade.ano_<%=cont%>.value;

        if(ano_<%=cont%>=="") {
            alert("Há campos não preenchidos!");
            document.habilidade.ano_<%=cont%>.focus();
        }
        else {
            <!--alert("formulario enviado com sucesso");  -->
        }
    }
    }
    //-->
    </script>

    --------------------------------------------------------------------------------------------------

     

    Abç

     

     

     

    terça-feira, 4 de maio de 2010 14:01
  • Paloma, qual mensagem de erro o script lhe da?

    Outro problema que pode estar ocorrendo, percebi que no seu script a variável cont  não está sendo inicializado o que pode não estar entrando no loop e pelo que percebi esta variável você gostaria de pegar do ASP e também se você esta dentro de um loop com váriavel "i" então você não precisa ficar setando variáveis em ASP, então creio que deva alterar seu script para o código abaixo:

     

    <script language="javascript" type="text/javascript">
    <!--
    function confere(){
        for (i=0; i <<%=cont%>; i++){

        ano = document.habilidade.ano_+i.value;

        if(ano_+i == "") {
            alert("Há campos não preenchidos!");
            document.habilidade.ano_+i.focus();
        }
        else {
            <!--alert("formulario enviado com sucesso");  -->
        }
    }
    }
    //-->
    </script>

     

    Abraço

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    terça-feira, 4 de maio de 2010 16:19
  • Fiz aki as mudanças conforme você disse e conforme eu achei que pudesse estar errado.


    O script não me retorna um erro. Ele apenas não faz o que deve ser feito.

    Ou seja, preciso q meu usuário marque um radionbutton por opção e o script está deixando passar sem barrar qdo ele não é marcado.


    Eu acho que pode ser um erro com o jeito que eu escrevi.
    Mais não sei encontrar.
    Nunca fiz nenhum JavaScript.


    --Desesperada já-- kkkk



    -----------------------------------------------------------------------------------------------------

    O script está assim:

    <script language="javascript" type="text/javascript">
    <!--
    function confere(){
        for (i=0; i<=<%=cont%>; i++){
      
        if(("ano_"&cont&i).value=="") {

            alert("Há campos em branco!");
          
        }
        else {
            alert("formulario enviado com sucesso");
        }
    }
    }
    //-->
    </script>




    terça-feira, 4 de maio de 2010 18:43
  • errata:

     

    * radio button

     

     

     

     

    E além disso. Preciso que esse script barre a passagem para a próxima página para que

    o usuário seja obrigado a marcar os em branco.

     

    Abçs

    terça-feira, 4 de maio de 2010 18:44
  • Paloma para você verificar o radio button, você utiliza o checked e não o value como está utilizando.

    Para cancelar o envio do form você precisa fazer a chamada da função na tag form pelo método onsubmit e retornando um valor, exemplo:

     

    Tag Form:

    <form id="habilidade" name="habilidade" method="post" action="cbc_salvar.asp" onsubmit="return confere();">

     

    Já sua função creio que deva ficar assim:

    <script language="javascript" type="text/javascript">
    <!--
    function confere(){
        for (i=0; i<=<%=cont%>; i++){

        ano = document.habilidade.ano_+i.value;
      
        if (ano.checked == false) {

            alert("Há campos em branco!");
            return false;      
        }
        else {
            alert("formulario enviado com sucesso");
            return true;
        }
    }
    }
    //-->
    </script>

     

    Abraço

     

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    terça-feira, 4 de maio de 2010 20:08
  • Ah tá, então com o radio button eu vopu colocar checked!

     

    Blz! Mudei agora, mas ainda assim ele não entra no if de jeito nenhum.

     

    Eu penso que teria que colocar o i no if. Pra que ele pudesse verificar o ano e o i. Fiz algumas mudanças no código.

     

    O que tem de errado?

     

    <script language="javascript" type="text/javascript">
    <!--
    function confere(){
        for (i=0; i<=<%=cont%>; i++){
        ano = ("ano_<%=cont%>")
       
        if (ano.checked == false) {
            alert("formulario enviado com sucesso");
            return true;
              
        }
        else {
        alert("Há campos em branco!");
            return false;  
           
        }
    }
    }
    //-->
    </script>

    quarta-feira, 5 de maio de 2010 11:55
  • Paloma creio que esteja quase correto, porém você não está buscando o campo pelo javascript, acho que deveria ser algo assim:

    <script language="javascript" type="text/javascript">
    <!--
    function confere(){
        for (i=0; i<=<%=cont%>; i++){
        ano = "ano_<%=cont%>"

        var elemento = document.getElementById(ano);   
        if (elemento.checked == false) {
            alert("formulario enviado com sucesso");
            return true;
              
        }
        else {
        alert("Há campos em branco!");
            return false;  
           
        }
    }
    }
    //-->
    </script>

     

    Segue um exemplo abaixo para lhe ajudar.

    <html>
    <head>
        <script type="text/javascript">
            function validar()
            {
                var elemento1 = document.getElementById("abc1");
                var elemento2 = document.getElementById("abc2");
                if ( elemento1.checked == true )
                {
                    alert("Elemento 1 selecionado");
                }
                else
                {
                    alert("Elemento 1 não selecionado");
                }
                   
                if ( elemento2.checked == true )
                {
                    alert("Elemento 2 selecionado");
                }
                else
                {
                    alert("Elemento 2 não selecionado");
                }
                return window.confirm("Deseja enviar o form?");
            }
        </script>
    </head>
    <body>
        <form action="" method="post" onsubmit="return validar();">
            <input type="radio" name="abc" id="abc1" value="1" />Elemento 1</br>
            <input type="radio" name="abc" id="abc2" value="2" />Elemento 2</br>
            <input type="submit" value="Enviar" />
        </form>
    </body>
    </html>

     

    Abraço

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    • Marcado como Resposta Paloma.ST quinta-feira, 6 de maio de 2010 12:07
    quarta-feira, 5 de maio de 2010 12:36
  • Sim! Agora deu certinho.

    Ficou assim:

     

    <script language="javascript" type="text/javascript">
    <!--
    function confere()
    {
        var i=0
        for (i=0; i<=(<%=cont%>); i++)
        {
            ano = ("ano_<%=cont%>")
            var elemento = document.getElementById(ano);
            if (elemento.checked == true)
            {
                alert("Formulario enviado com sucesso");
                return true;
               
            }
            else
            {
                  alert("Há campos em branco!");
                return false;
            }
           

        }
    }
    //-->
    </script>

     

    --------------------------------------------------------------------------------------------

    Só tem uma coisa ...

     

    Quando aparece o alert, ele está aparecendo duas vezes.

    Como se tivesse passando pelo for de novo.

     

    Abç

     

    • Marcado como Resposta Paloma.ST quinta-feira, 6 de maio de 2010 12:07
    • Não Marcado como Resposta Paloma.ST quinta-feira, 6 de maio de 2010 12:07
    quarta-feira, 5 de maio de 2010 12:55
  • Já descobri pq dá a msg duas vezes.

     

    Ele executa o confere() duas vezes, pq tem uma vez no onClick e outra

    no form.

     

    Mas preciso das duas pq se não não funciona. Se eu tirar o do form ele vai direto pra

    proxima página.

    Se eu tirar o do OnClik ele não verifica certo.

     

    O que eu posso fazer?

     

    Abç

    quarta-feira, 5 de maio de 2010 13:29
  • Se você tirar o do onclick o que acontece? O que ele não verificar certo?

     

    Abraço

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    quarta-feira, 5 de maio de 2010 14:04
  • Mesmo que eu marque todos os radio buttons ele dá o alert:

     

    Há campos em branco!

     

    Abç

    quarta-feira, 5 de maio de 2010 14:17
  • Paloma, me envia o código da página novamente para eu verificar o que pode estar ocorrendo.

    Abraço

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    quarta-feira, 5 de maio de 2010 14:22
  • Segue:

     

     

    <%  Set Conn = Server.CreateObject("ADODB.Connection")
        Conn.Open Session("ConnectionString") %>
    <html>
    <head>
        <title>:: Enquete - CRV ::</title>
       

    </head>
    <body>
        <form id="habilidade" name="habilidade" method="post" action="cbc_salvar.asp" onSubmit="return confere();">
          <p>
            <% disciplina = request.Form("disciplina")%>
            <%Set cbc_questoes=Conn.execute("S_LISTA_HABILIDADE @id_disciplina="&disciplina)%>
    </p>
          <p>Selecione o ano que voc&ecirc; acha que pertence a habilidade: </p>
          <table width="80%" border="1"  cellspacing="0" align="center">
    <tr>    
                        <td width=25%" align="center"><b><font face="Helvetica" size="2" >TÓPICO</font></b></td>
                        <td width=55%" align="center"><b><font face="Helvetica" size="2" >HABILIDADE</font></b></td>
                        <td align="center"><b><font face="Helvetica" size="2" >6</font></b>                    </td>
                        <td align="center"><b><font face="Helvetica" size="2" >7</font></b>                    </td>
                        <td align="center"><b><font face="Helvetica" size="2" >8</font></b>                    </td>
                        <td align="center"><b><font face="Helvetica" size="2" >9</font></b>                    </td>
        <%
            dim cont
            cont=0
        %>         
        <% Do While not cbc_questoes.eof %>
    <% cont= cont+1%>
            <tr>
                        <td width="15%" align="justify"><font face="Helvetica" size="2" >
                        <%=cbc_questoes("numero_topico")%>. <%=cbc_questoes("topico")%></font>                    </td>
                               <td align=align="justify"><font face="Helvetica" size="2" ><input name="id_habilidade_<%=cont%>" type="hidden" id="id_habilidade_<%=cont%>" value="<%=cbc_questoes("id_habilidade")%>"><%=cbc_questoes("completo_habilidade")%>. <%=cbc_questoes("habilidade")%></font></td>            
                        <td align="center"><font face="Helvetica" size="2" ></font></b>                    <label></label>
                                              <label></label>
                                              </b>
                                              <label>
                                              <input name="ano_<%=cont%>" type="radio" id="ano_<%=cont%>" value="6">
                                              </label></td>
                                            <td align="center"><font face="Helvetica" size="2" >
                        </font>
                                              <input name="ano_<%=cont%>" type="radio" id="ano_<%=cont%>2" value="7"></td>
                        <td align="center"><font face="Helvetica" size="2" >
                        </font>
                          <label></label>
                          <label></label>
                          <input name="ano_<%=cont%>" type="radio" id="ano_<%=cont%>3" value="8">
                          </b>
                        <label></label></td>
                        <td align="center"><font face="Helvetica" size="2" >
                        </font>
                          <label></label>
                          <label></label>
                          </b>
                          <input name="ano_<%=cont%>" type="radio" id="ano_<%=cont%>4" value="9">
                        <label></label></td>
                    <%
                    cbc_questoes.movenext
                    Loop %>
        </table>
      <label></label>
      <label></label>
      <input name="cont" type="hidden" id="cont" value="<%=cont%>">
      <table width="200" border="0" align="center">
      <tr>
        <td><div align="center">
          <input type="submit" name="salvar" id="salvar" value="Salvar" onClick="confere()">
        </div></td>
        <td>
        <div align="center">
          <input type="reset" name="limpar" id="limpar" value="Limpar">
        </div></td>
      </tr>
    </table>
    </form>
    </body>
    </html>

    <script language="javascript" type="text/javascript">
    <!--
    function confere()
    {
        var i=1
        for (i=1; i<=(<%=cont%>); i++)
        {
            ano = ("ano_<%=cont%>")
            var elemento = document.getElementById(ano);
            if (elemento.checked == false)
            {
                alert("Você deve responder a todas habilidades!" );
                return false;
               
            }
            else
            {
                  alert("Formulario enviado com sucesso");            
                return true;
            }
           
        }
    }
    //-->
    </script>

    ---------------------------------------------------------------------------------------

    Abç

    quarta-feira, 5 de maio de 2010 14:25
  • Paloma, realmente no seu caso a situação é um pouco mais complicada, segue possível solução:

    1) Retirar a chamado do onclick e somente deixar no onsubmit.

    2) Trocar o javascript para este abaixo:

    <script language="javascript" type="text/javascript">
    <!--
    function confere()
    {
        var allChecked = false;
        var i=1
        for (i=1; i<=(<%=cont%>); i++)
        {
            var ano = 'ano_'+i;
            var optSelected = false;
           
            for (var z = 0; z < eval('document.habilidade.'+ano+'.length'); z++)
            {
                if ( eval('document.habilidade.'+ano+'['+z+'].checked') == true )
                {
                    optSelecionado = true;
                    break;
                }
            }
            if ( i == 1 )
                allChecked = optSelecionado;
            else if ( i > 1 && allChecked == false )
                allChecked = false;
            else
                allChecked = optSelecionado;
        }
        return allChecked;
    }
    //-->
    </script>

     

    Em todo caso segue um teste que fiz para ajudar.

    <html>
    <head>
        <script type="text/javascript">
            function validar()
            {
                var geral = false;
                for (var z = 1; z <= 3; z++)
                {
                    var ano = z;
                    var optSelecionado = false;
                    for (var i = 0; i < eval('document.frm.abc'+ano+'.length'); i++)
                    {
                        if ( eval('document.frm.abc'+ano+'['+i+'].checked') == true )
                        {
                            optSelecionado = true;
                            break;
                        }
                    }
                    if ( z == 1 )
                        geral = optSelecionado;
                    else if ( z > 1 && geral == false)
                        geral  = false;
                    else
                        geral = optSelecionado;
                }
                return geral;
            }
        </script>
    </head>
    <body>
        <form name="frm" action="" method="post" onsubmit="return validar();">
            Radio 1<br />
            <input type="radio" name="abc1" id="abc1" value="1" />Elemento 1</br>
            <input type="radio" name="abc1" id="abc1" value="2" />Elemento 2</br>
            Radio 2<br />
            <input type="radio" name="abc2" id="abc2" value="1" />Elemento 1</br>
            <input type="radio" name="abc2" id="abc2" value="2" />Elemento 2</br>
            <input type="radio" name="abc2" id="abc2" value="3" />Elemento 2</br>
            Radio 3<br />
            <input type="radio" name="abc3" id="abc3" value="1" />Elemento 1</br>
            <input type="radio" name="abc3" id="abc3" value="2" />Elemento 2</br>
            <input type="radio" name="abc3" id="abc3" value="3" />Elemento 2</br>
            <input type="submit" value="Enviar" />
        </form>
    </body>
    </html>

     

    Abraço

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    quarta-feira, 5 de maio de 2010 17:24
  •  

    Eu descobri que o erro não era extamente no JavaScript.

    Pq na realidade ele funcionava certinho qdo selecionava determinada disciplina e não funciona em outras. O erro deve estar em algum outro lugar do meu código.

    Que eu ainda não faço idéia de onde esteja.

     

    Vou analizar ele e dou retorno.

     

    Mas desde já vou marcar como resposta certa o Script q eu estou usando.

    E agradeço muito pela ajuda.

     

    Abçs

     

    Paloma Alves

    quinta-feira, 6 de maio de 2010 12:06