Preciso de ajuda para localizar uma falha.
Tenho um formulário html obviamente com vários campos.
Estou usando uma função valida JavaScript que faz o seguinte:
1) Varre o formulário em busca dos elementos em um for atribuindo índice 'i' à cada campo.
2) Apenas valida se os campos input forem dos tipos text, button ou radio.
3) De fato, tenho dois campos radio no formulário que habilitam(s)/desabilitam(n) outro campo do formulário.
4) Partindo desse raciocínio,do primeiro campo radio(o que habilita o outro campo), até o campo a ser habilitado São 2 campos a saber: o segundo radio (o que desabilita) e o campo a ser habilitado)
5) Então, dos campos que passam pela validação de serem radio, button ou text, eu filtro assim:
Se for radio, e se não for.
Caso radio, eu verifico a propriedade id do campo (não pode ser a propriedade name pois os names estão sendo criadas e forma de array (nomeCampo[0][0] e então o JavaScript não reconhece), e, de posse do id, pego seu valor e comparo: Se o radio estiver marcado E seu valor for 's' , valida habilita o segundo campo e o valida. Senão, não faz nada.
Bom, ai é que esta o problema: O scritpt chega dentrro do filtro por radio, text e button, entra no filtro de radio. Aqui entramos no filtro por radio com o primeiro radio, o do value='s', ele esta marcado, então, o outro campo é habilitado e seu valor validade corretamente. Acontece que, caso o radio com value 'n' seja o que esta marcado, a função continua cobrando a validação embora não habilite o segundo campo.
Onde será que esta o erro?
Eis a unção JavaScript
function valida_cad_empresa2(form) { for (i=0;i<document.gravatipos.elements.length;i++) { if ( (document.gravatipos.elements[i].type == 'text') || (document.gravatipos.elements[i].type == 'radio') || (document.gravatipos.elements[i].type == 'textarea') ) { if(document.gravatipos.elements[i].type=='radio') { idCampo=document.gravatipos.elements[i].id; //alert('Id: '+idCampo+', Marcado? '+document.getElementById(idCampo).checked+', Valor? '+document.getElementById(idCampo).value); if((document.getElementById(idCampo).checked==true) && (document.getElementById(idCampo).value=='s')) { if(document.gravatipos.elements[i+2].value=='') { alert("Campo obrigatório!"); document.gravatipos.elements[i+2].focus(); return (false); } } } else { if(document.gravatipos.elements[i].value == "") { alert("Campo obrigatório!"); document.gravatipos.elements[i].focus(); return (false); } } } } form.submit(); }Adicionei ao códgo, como pode ser visualizado, um alert para ver a saída.
Quando o capo da vez é o radio co value='s', a saída é:
Id: taxa_cad_empresass[3], Marcado? n, Valor: sE o segundo radio:
Id: taxa_cad_empresasn[3], Marcado? s, Valor: nPor que será que esta pedindo a validação mesmo assim?
O Trecho do HTML
... <label class='passo2'>Taxa de Serviço?</label> : <input type="radio" name="taxa_cad_empresas[<?php echo $servico;?>]" id="taxa_cad_empresass[<?php echo $servico;?>]" value="s" onclick="abre('taxa[<?php echo $servico;?>]')" /> Sim <input type="radio" name="taxa_cad_empresas[<?php echo $servico;?>]" id="taxa_cad_empresasn[<?php echo $servico;?>]" value="n" onclick="fecha('taxa[<?php echo $servico;?>]')" checked="checked" /> Não<br /> <div id="taxa[<?php echo $servico;?>]" style="display:none"> <label class='passo2'>Valor </label> : <input type="text" name="taxaValor_cad_empresas[<?php echo $servico;?>]" id="taxaValor_cad_empresas[<?php echo $servico;?>]" value="" class="real"/> </div><br /> ...
consegui:
function valida_cad_empresa2(form) { for (i=0;i<document.gravatipos.elements.length;i++) { if ( (document.gravatipos.elements[i].type == 'text') || (document.gravatipos.elements[i].type == 'radio') || (document.gravatipos.elements[i].type == 'textarea') ) { if(document.gravatipos.elements[i].type=='radio') { idCampo=document.gravatipos.elements[i].id; if((document.getElementById(idCampo).checked==true) && (document.getElementById(idCampo).value=='s')) { if(document.gravatipos.elements[i+2].value=='') { alert("Campo obrigatório!"); document.gravatipos.elements[i+2].focus(); return (false); } } } else { if(document.gravatipos.elements[i].name.substr(0,22) != "taxaValor_alt_empresas") { if(document.gravatipos.elements[i].value == "") { alert("Campo obrigatório A!"); document.gravatipos.elements[i].focus(); return (false); } } } } } form.submit(); }Grato a todos!
Sei: com gabiarra. Mas funcionou seguro. Isso é o que vale!
Alguma sugestão melhor?