Formulários HTML: Problemas com campos desabilitados?

Que desenvolvedor web nunca teve problemas com os campos desabilitados não irem no request?!? Pois é. Tivemos muito aqui! Foi aí que tive a idéia deste maravilhoso JavaScript que resolve o problema.

[ Hits: 24.312 ]

Por: Gabriel Ortiz Lour em 07/12/2006


Explicando o abacaxi...



Você, desenvolvedor web, já teve problemas ao submeter um formulário e.... cadê o valor do meu campo??? Ele estava desabilitado... será que é isto? Sim! Os campos desabilitados NÃO vão no request ao submeter um formulário. Que inferno! Espero que o HTML 2.0 resolva isso.

Mas... Enquanto esperamos, aqui esta a solução!!!

o pequeno JavaScript a seguir é, na minha modesta opinião, maravilhoso.

O que ele faz?
Temos duas funções JS (uma seria "public" e outra "private"), o que o desenvolvedor precisa fazer é chamar a primeira delas "procuraDesabilitados()" passando o formulário como parâmetro. Pronto!

Por baixo dos panos o que é feito? A rotina chamada vai (recursivamente) procurando todos os campos dentro do formulário e para cada campo encontrado ela faz o seguinte:

1. Verifica se o campo esta desabilitado. se não tiver pula.

2. Altera o nome do campo, colocando "Auxiliar" no final, para não valer mais.

3. Cria dinamicamente um novo campo escondido (hidden) com o mesmo nome e valor do campo anterior (renomeado para Auxiliar).

4. Pronto!

Agora temos um campo escondido, com o nome do campo original, que vai enviar corretamente os dados no request, e como o campo desabilitado não envia valor, deve-se ignorar tudo que vier pelos campos "Auxiliar".

Siga para a próxima página que teremos o código JavaScript.

Na terceira página teremos um pequeno teste PHP de exemplo.

Dúvidas, sugestões, críticas... Estamos aí!

Testado no super Firefox e até no lixo do IbugsE.

    Próxima página

Páginas do artigo
   1. Explicando o abacaxi...
   2. Código JavaScript
   3. Pequeno PHP para testes
Outros artigos deste autor

Servidor Apache Profissional

Instalando drivers para placas de vídeo SiS

Leitura recomendada

Dicas simples para dar mais usabilidades aos formulários

Verificando a consistência de um formulário com JavaScript

Verificando a consistência de CPF e CNPJ em um formulário com JavaScript

Select dinâmico com PHP, Javascript e MySQL

Máquina Enigma e encriptação em XOR

  
Comentários
[1] Comentário enviado por Bruno Faria em 07/12/2006 - 20:49h

Realmente este problema de enviar os dados dos campos desabilitados eh uma dor d cabeça para a maioria dos desenvolvedores. Como voce disse, esperaremos pela versao 2 para verificar se tal bug fora corrigido.

[2] Comentário enviado por ls_junior em 08/12/2006 - 07:27h

Na minha opnião os campos desabilitados não devem fazer parte do request, para isso tem-se o atributo readonly, que não permite a alteração do valor. No caso dos select/radio/checkbox, que ignoram o atributo readonly, basta desabilitá-los e, antes de enviar o formulário, habilitá-los novamente.

...
function enviarDados() {
for(var i = 0; i < document.form.elements.length; i++) {
if(document.form.elements[i].disabled) {
document.form.elements[i].disabled = false;
}
}
return true;
}
...
<form name="form" id="form" method="post" onsubmit="return enviarDados();">
...


PS: Solução é bastante interessante.

[3] Comentário enviado por jonathantavares em 20/09/2007 - 00:49h

Esses formularios sao bastante interessantes e com boa utilização, mas sempre tem alguns problemas com esses campos, mas existen n solucoes!


Contribuir com comentário