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.
Parte 3: Pequeno PHP para testes
index.php:
<html>
<head>
<script>
function arrumarCampoDesabilitado(node) {
var tipo = node.getAttribute("type");
if(tipo == "radio" && !node.checked) return;
var nome = node.getAttribute("name");
var val = node.value;
if(tipo == "checkbox") val = (node.checked) ? "on" : "";
node.setAttribute("name", nome+"H");
var novoCampo = document.createElement('input');
novoCampo.setAttribute('type', 'hidden');
novoCampo.setAttribute('name', nome);
novoCampo.setAttribute('value', val);
node.parentNode.appendChild(novoCampo);
}
function procuraDesabilitados(node) {
if(node!=null) {
if(((node.nodeName == "INPUT" && node.getAttribute("type")!="button") || node.nodeName == "SELECT") && node.disabled) {
arrumarCampoDesabilitado(node);
}
if(node.hasChildNodes())
for(var j=0; j<node.childNodes.length; j++)
procuraDesabilitados(node.childNodes[j]);
}
}
function aoEnviar() {
var _formularioZero = document.forms[0];
if(_formularioZero) procuraDesabilitados(_formularioZero);
document.form0.submit();
}
function btDisab() {
document.form0.campoTexto.disabled = true;
document.form0.campoCheck.disabled = true;
document.form0.campoRadio[0].disabled = true;
document.form0.campoRadio[1].disabled = true;
document.form0.campoCombo.disabled = true;
}
</script>
</head>
<body>
<form action="mostra.php" name="form0" method="post" id="formulario">
campoTexto: <input type="text" name="campoTexto" value="teste" /><br />
campoCheck: <input type="checkbox" name="campoCheck" checked /><br />
campoRadio: <input type="radio" name="campoRadio" value="A" checked /> A - <input type="radio" name="campoRadio" value="B" /> B<br />
campoCombo: <select name="campoCombo">
<option value="AAA">AAA</option>
<option value="BBB">BBB</option>
<option value="CCC">CCC</option>
</select>
<br />
<br />
<input type="button" value="Disab" onclick="btDisab()" /><br />
<br />
<input type="button" value="Vai!" onclick="aoEnviar()" />
</form>
</body>
</html>
<head>
<script>
function arrumarCampoDesabilitado(node) {
var tipo = node.getAttribute("type");
if(tipo == "radio" && !node.checked) return;
var nome = node.getAttribute("name");
var val = node.value;
if(tipo == "checkbox") val = (node.checked) ? "on" : "";
node.setAttribute("name", nome+"H");
var novoCampo = document.createElement('input');
novoCampo.setAttribute('type', 'hidden');
novoCampo.setAttribute('name', nome);
novoCampo.setAttribute('value', val);
node.parentNode.appendChild(novoCampo);
}
function procuraDesabilitados(node) {
if(node!=null) {
if(((node.nodeName == "INPUT" && node.getAttribute("type")!="button") || node.nodeName == "SELECT") && node.disabled) {
arrumarCampoDesabilitado(node);
}
if(node.hasChildNodes())
for(var j=0; j<node.childNodes.length; j++)
procuraDesabilitados(node.childNodes[j]);
}
}
function aoEnviar() {
var _formularioZero = document.forms[0];
if(_formularioZero) procuraDesabilitados(_formularioZero);
document.form0.submit();
}
function btDisab() {
document.form0.campoTexto.disabled = true;
document.form0.campoCheck.disabled = true;
document.form0.campoRadio[0].disabled = true;
document.form0.campoRadio[1].disabled = true;
document.form0.campoCombo.disabled = true;
}
</script>
</head>
<body>
<form action="mostra.php" name="form0" method="post" id="formulario">
campoTexto: <input type="text" name="campoTexto" value="teste" /><br />
campoCheck: <input type="checkbox" name="campoCheck" checked /><br />
campoRadio: <input type="radio" name="campoRadio" value="A" checked /> A - <input type="radio" name="campoRadio" value="B" /> B<br />
campoCombo: <select name="campoCombo">
<option value="AAA">AAA</option>
<option value="BBB">BBB</option>
<option value="CCC">CCC</option>
</select>
<br />
<br />
<input type="button" value="Disab" onclick="btDisab()" /><br />
<br />
<input type="button" value="Vai!" onclick="aoEnviar()" />
</form>
</body>
</html>
mostra.php:
<html>
<head>
</head>
<body>
campoTexto: <? echo $_POST['campoTexto']; ?> <br>
campoCheck: <? echo $_POST['campoCheck']; ?> <br>
campoRadio: <? echo $_POST['campoRadio']; ?> <br>
campoCombo: <? echo $_POST['campoCombo']; ?> <br>
</body>
</html>
<head>
</head>
<body>
campoTexto: <? echo $_POST['campoTexto']; ?> <br>
campoCheck: <? echo $_POST['campoCheck']; ?> <br>
campoRadio: <? echo $_POST['campoRadio']; ?> <br>
campoCombo: <? echo $_POST['campoCombo']; ?> <br>
</body>
</html>
É só colocar em um Apache para rodar o PHP e testar enviando o pequeno formulário. Tem um botãozão para desabilitar tudo. É só um testezinho...