Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
>
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:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.ipis.com.br/web/java.png&key=99d52294b1dfcb71dc3a08e23991741ad1e1fa8eb9272eecc007e4b1d13e72bb" alt="java.png" />
>
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.
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.
>
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 )
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.
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);
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.
está muito mal indentado esse código.
ele devia fazer oque ?