Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

InterPlanet

[Resolvido] getElementById

Recommended Posts

Olá pessoal, saudações!

 

O código:

 

...
    // PARCELAS MANUAIS
    if (Form.Pagamento_ParecaldoForma.value == 'Manual')
       { var Parcelas       = Form.Pagamento_Parcelas.value;

         for(var i = 1; i <= Parcelas; i++)
         {
           // Parcela Vencimento
           Campo                      = document.getElementById('Vencimento'+i);
           if (!Campo.value || Campo.value == '')
              { Enviar                = false;
                Mensagem             += 'Informe a data do [VENCIMENTO '+i+'].\n';
              }
           else { if (Campo.value.length < 10 || Campo.value.charAt(2) != "/" || Campo.value.charAt(5) != "/" || !Numeros(Campo.value, '/:2'))
                     { Enviar         = false;
                       Mensagem      += 'Informe corretamente a data do [VENCIMENTO '+i+'].\n- Formato: dd/mm/aaaa\n';
                     }
                }

           // Parcela Valor
           Minimo                     = 1;
           Maximo                     = 99999.99;
           Campo                      = document.getElementById('Valor'+i);
           if (!Campo.value || Campo.value == '')
              { Enviar                = false;
                Mensagem             += 'Informe o valor da [PARCELA '+i+'].\n';
              }
           else { if (Math.abs(Campo.value) < Minimo || Math.abs(Campo.value) > Maximo || !Numeros(Campo.value, '.'))
                     { Enviar         = false;
                       Mensagem      += 'Informe corretamente o valor da [PARCELA '+i+'].\n- Formato: dd/mm/aaaa\n';
                     }
                }
         }
       }
...

 

A variavel Campo, ora antes criada, quando setada com

[ Campo = document.getElementById('Vencimento'+i); ] e/ou

[ Campo = document.getElementById('Valor'+i); ]

 

Sempre retorna NULL, assim, "Campo.value" não funciona e da erro. Alguma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

está muito mal indentado esse código.

 

ele devia fazer oque ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

está muito mal indentado esse código.

 

ele devia fazer oque ?

 

Campo = document.getElementById('Vencimento'+i);

alert(Campo.value);

 

Deve relacionar o elemeto a variavel campo para eu poder manipular o value, length e etc.

 

Quanto a indentação, é irrelevante. O pro é que não funciona, ao tentar usar Campo.value, apresenta o erro:

 

java.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quanto a indentação, é irrelevante.

não para os humanos que vão ler o teu código.

 

como está o HTML ?

você não precisa desse malabarismo com ID.

 

exemplo:

http://code.imasters.com.br/index.php?/topic/135-selecionar-inputs-pelo-name/

 

esqueça o debug pobre do IE

aperte Ctrl + Shif + J no Firefox, e você verá o 'erro' de forma mais precisa e explicativa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

HTML gerado pelo PHP:

 

                     <tr class="Form_Titulo">

                       <td class="Form_Titulo_Cel" colspan="2">Parcelamento</td>
                     </tr>
                     <tr class="Form_Linha"><td class="Form_Linha_Cel_Esq">1º Vencimento:</td><td class="Form_Linha_Cel_Dir"><input label="Parcela 1 (Vencimento)" type="text" name="Vencimentos[1]" id="Vencimento1" value="01/02/2011" maxlength="10" class="Form_CampoTexto" style="width:80px; text-align:center;"> - <input label="Parcela 1 (Valor)" type="text" name="Valores[1]" id="Valor1" value="4.17" maxlength="10" class="Form_CampoTexto" style="width:80px;"></td></tr>
                     <tr class="Form_Linha"><td class="Form_Linha_Cel_Esq">2º Vencimento:</td><td class="Form_Linha_Cel_Dir"><input label="Parcela 2 (Vencimento)" type="text" name="Vencimentos[2]" id="Vencimento2" value="01/03/2011" maxlength="10" class="Form_CampoTexto" style="width:80px; text-align:center;"> - <input label="Parcela 2 (Valor)" type="text" name="Valores[2]" id="Valor2" value="4.17" maxlength="10" class="Form_CampoTexto" style="width:80px;"></td></tr>
                     <tr class="Form_Linha"><td class="Form_Linha_Cel_Esq">3º Vencimento:</td><td class="Form_Linha_Cel_Dir"><input label="Parcela 3 (Vencimento)" type="text" name="Vencimentos[3]" id="Vencimento3" value="01/04/2011" maxlength="10" class="Form_CampoTexto" style="width:80px; text-align:center;"> - <input label="Parcela 3 (Valor)" type="text" name="Valores[3]" id="Valor3" value="4.17" maxlength="10" class="Form_CampoTexto" style="width:80px;"></td></tr>

                     <tr class="Form_Linha"><td class="Form_Linha_Cel_Esq">4º Vencimento:</td><td class="Form_Linha_Cel_Dir"><input label="Parcela 4 (Vencimento)" type="text" name="Vencimentos[4]" id="Vencimento4" value="01/05/2011" maxlength="10" class="Form_CampoTexto" style="width:80px; text-align:center;"> - <input label="Parcela 4 (Valor)" type="text" name="Valores[4]" id="Valor4" value="4.17" maxlength="10" class="Form_CampoTexto" style="width:80px;"></td></tr>
                     <tr class="Form_Linha"><td class="Form_Linha_Cel_Esq">5º Vencimento:</td><td class="Form_Linha_Cel_Dir"><input label="Parcela 5 (Vencimento)" type="text" name="Vencimentos[5]" id="Vencimento5" value="01/06/2011" maxlength="10" class="Form_CampoTexto" style="width:80px; text-align:center;"> - <input label="Parcela 5 (Valor)" type="text" name="Valores[5]" id="Valor5" value="4.17" maxlength="10" class="Form_CampoTexto" style="width:80px;"></td></tr>
                     <tr class="Form_Linha"><td class="Form_Linha_Cel_Esq">6º Vencimento:</td><td class="Form_Linha_Cel_Dir"><input label="Parcela 6 (Vencimento)" type="text" name="Vencimentos[6]" id="Vencimento6" value="01/07/2011" maxlength="10" class="Form_CampoTexto" style="width:80px; text-align:center;"> - <input label="Parcela 6 (Valor)" type="text" name="Valores[6]" id="Valor6" value="4.17" maxlength="10" class="Form_CampoTexto" style="width:80px;"></td></tr>
                     <tr class="Form_Linha"><td class="Form_Linha_Cel_Esq">7º Vencimento:</td><td class="Form_Linha_Cel_Dir"><input label="Parcela 7 (Vencimento)" type="text" name="Vencimentos[7]" id="Vencimento7" value="01/08/2011" maxlength="10" class="Form_CampoTexto" style="width:80px; text-align:center;"> - <input label="Parcela 7 (Valor)" type="text" name="Valores[7]" id="Valor7" value="4.17" maxlength="10" class="Form_CampoTexto" style="width:80px;"></td></tr>

                     <tr class="Form_Linha"><td class="Form_Linha_Cel_Esq">8º Vencimento:</td><td class="Form_Linha_Cel_Dir"><input label="Parcela 8 (Vencimento)" type="text" name="Vencimentos[8]" id="Vencimento8" value="01/09/2011" maxlength="10" class="Form_CampoTexto" style="width:80px; text-align:center;"> - <input label="Parcela 8 (Valor)" type="text" name="Valores[8]" id="Valor8" value="4.17" maxlength="10" class="Form_CampoTexto" style="width:80px;"></td></tr>
                     <tr class="Form_Linha"><td class="Form_Linha_Cel_Esq">9º Vencimento:</td><td class="Form_Linha_Cel_Dir"><input label="Parcela 9 (Vencimento)" type="text" name="Vencimentos[9]" id="Vencimento9" value="01/10/2011" maxlength="10" class="Form_CampoTexto" style="width:80px; text-align:center;"> - <input label="Parcela 9 (Valor)" type="text" name="Valores[9]" id="Valor9" value="4.17" maxlength="10" class="Form_CampoTexto" style="width:80px;"></td></tr>
                     <tr class="Form_Linha"><td class="Form_Linha_Cel_Esq">10º Vencimento:</td><td class="Form_Linha_Cel_Dir"><input label="Parcela 10 (Vencimento)" type="text" name="Vencimentos[10]" id="Vencimento10" value="01/11/2011" maxlength="10" class="Form_CampoTexto" style="width:80px; text-align:center;"> - <input label="Parcela 10 (Valor)" type="text" name="Valores[10]" id="Valor10" value="4.17" maxlength="10" class="Form_CampoTexto" style="width:80px;"></td></tr>
                     <tr class="Form_Linha"><td class="Form_Linha_Cel_Esq">11º Vencimento:</td><td class="Form_Linha_Cel_Dir"><input label="Parcela 11 (Vencimento)" type="text" name="Vencimentos[11]" id="Vencimento11" value="01/12/2011" maxlength="10" class="Form_CampoTexto" style="width:80px; text-align:center;"> - <input label="Parcela 11 (Valor)" type="text" name="Valores[11]" id="Valor11" value="4.17" maxlength="10" class="Form_CampoTexto" style="width:80px;"></td></tr>

                     <tr class="Form_Linha"><td class="Form_Linha_Cel_Esq">12º Vencimento:</td><td class="Form_Linha_Cel_Dir"><input label="Parcela 12 (Vencimento)" type="text" name="Vencimentos[12]" id="Vencimento12" value="01/01/2012" maxlength="10" class="Form_CampoTexto" style="width:80px; text-align:center;"> - <input label="Parcela 12 (Valor)" type="text" name="Valores[12]" id="Valor12" value="4.17" maxlength="10" class="Form_CampoTexto" style="width:80px;"></td></tr>

 

Os campos com ID estao na parte da geracao do parcelamento manual.

 

E o malabarismo é necessario sim, pois o name e um array (Vencimentos[]) pro post.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os campos com ID estao na parte da geracao do parcelamento manual.

 

E o malabarismo é necessario sim, pois o name e um array (Vencimentos[]) pro post.

pronto, usa o name e esquece o ID, como eu disse, não é necessário.

 

veja o exemplo no link que postei, no post acima deste teu.

 

qndo for postar HTML no forum de javascript, coloque o HTML gerado, e não o codigo php gerador.

 

Ctrl + U ( Exibir > Código Fonte )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta, vou ver se funfa o name no formato array.

 

Não funcionou!

Creio que porque o problema e que apesar dos elementos id "Vencimento1" ate "Vencimento12" existirem, na hora do submit (checagem), ele diz que o elemento é NULL.

 

E no FF tambem diz que nao existe:

 

Erro: document.getElementById("Vencimento" + i) is null

Arquivo-fonte: http://192.168.0.180/cobpag/v1.0/dev/midia/js/vendas.js

Linha: 334

 

Contudo, tenho certeza que os inputs sao gerados, sao visiveis no codigo fonte.

 

qndo for postar HTML no forum de javascript, coloque o HTML gerado, e não o codigo php gerador.

 

Desculpe! Corrigido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz o teu php, gerar sem nada na chave.

em vez de:

name="Vencimentos[1]"

apenas:

name="Vencimentos[]"

na hora de receber o post, vai dar na mesma.

e assim você conseguirá percorrer com o js que indiquei.

 

corrija o seguinte no teu codigo, so para testarmos:

alert( 'Vencimento'+i );//diga oque aparecer
var  Campo                      = document.getElementById('Vencimento'+i);

Compartilhar este post


Link para o post
Compartilhar em outros sites

O alert retorna "Vencimento1" 2 3 4 ..., o i no for ta ok, nao entendo porque ao passar o elemento para a var Campo (mesmo a redeclarando como orientou), ele diz que o objeto é NULL.

 

PARA TUDO! Achei um erro, ao seguir ao verificar se todas as var estavam definidas. Posto ja se resolver.

 

Estou muito envergonhado! :(

Peço sinceras desculpas.

 

Olha o começo da função:

 

function Form_Cadastro(Form)
{
// Limpar os avisos de erros
for (var i = 0; i < Form.elements.length; i++)
   { var Campo              = Form.elements[i];
     Campo.id               = ''; }

// Cores para os campos condicionais
var Cor                      = 1;
var Cores                    = new Array();
Cores[1]                     = 'Amarelo';
Cores[2]                     = 'Verde';
Cores[3]                     = 'Azul';

// Variaveis
var Mensagem                 = 'Atenção!\nPor favor, verifique os campos:\n\n';
var Enviar                   = true;
var Campo                    = '';
var Parar                    = false;
var Minimo                   = 0;
var Maximo                   = 0;

// VALIDACOES
// Tipo
Campo                        = Form.Tipo;
if (Campo.value == 0)
  { Enviar                  = false;
    Mensagem               += 'Selecione um [TIPO] na lista.\n';
    Campo.id                = 'Erro'; Campo.focus(); }
...

 

Essa funcao limpa todos os id's no inicio porque eu seto o id = "Erro" para o css (.Campo#Erro {color:red}, algo assim pra resumir) pode colorir a borda do campo e assim destacar os campos que contem erro para o usuario. Vou adicionar uma excecao para os campos que nao po mudar o id la no comeco!

 

Solucao:

 

Troca de:

// Limpar os avisos de erros
for (var i = 0; i < Form.elements.length; i++)
   { var Campo              = Form.elements[i];
     Campo.id               = ''; }

 

Por:

// Limpar os avisos de erros
for (var i = 0; i < Form.elements.length; i++)
   { var Campo              = Form.elements[i];
     if (Campo.name != 'Vencimentos[]' && Campo.name != 'Valores[]')
        { Campo.id          = ''; }
   }

 

E remocao do index nos inputs array Vencimentos[] e Valores[].

 

 

 

Novamente, peço sinceras desculpas pela minha falta de atencao e agradeco a de voces.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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