bisogna controllare bene perchè non è esattamente semplice
codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Pagina senza titolo</title>
<style type="text/css">
.rosso {border:1px #E0E0E0 solid; background-color: #FFE6E6;}
.verde {border:1px #E0E0E0 solid; background-color: #E6FFE6;}
</style>
<script language="javascript" type="text/javascript">
// <!CDATA[
function test(value)
{
var c1 = document.getElementById("campo1");
var c2 = document.getElementById("campo2");
var c3 = document.getElementById("campo3");
var c4 = document.getElementById("campo4");
var c5 = document.getElementById("campo5");
var c6 = document.getElementById("campo6");
var s1 = document.getElementById("campo7");
if (value == '0') //predefinito
{
c1.disabled = true;
c2.disabled = true;
c3.disabled = true;
c4.disabled = true;
c5.disabled = true;
c6.disabled = true;
s1.disabled = true;
}
else if (value == '1')
{
c1.disabled = true;
c2.disabled = true;
c3.disabled = true;
c4.disabled = true;
c5.disabled = true;
c6.disabled = true;
s1.disabled = true;
}
else if (value == '2')
{
c1.disabled = false;
c2.disabled = true;
c3.disabled = false;
c4.disabled = true;
c5.disabled = true;
c6.disabled = true;
s1.disabled = false;
}
else if (value == '3')
{
c1.disabled = true;
c2.disabled = true;
c3.disabled = false;
c4.disabled = true;
c5.disabled = true;
c6.disabled = false;
s1.disabled = true;
}
else if (value == '4')
{
c1.disabled = true;
c2.disabled = false;
c3.disabled = false;
c4.disabled = false;
c5.disabled = true;
c6.disabled = true;
s1.disabled = false;
}
else if (value == '5')
{
c1.disabled = true;
c2.disabled = true;
c3.disabled = true;
c4.disabled = true;
c5.disabled = false;
c6.disabled = true;
s1.disabled = true;
}
for(var i = 1; i <= 7; i++)
{
var v = document.getElementById("campo" + i);
if(v.disabled) v.className = "rosso"; else v.className = "verde";
}
//faccio un reset della seconda select
s1.selectedIndex = 0;
test2("01");
}
function controlla1()
{
var controllo = true;
var messaggio = "";
//validazione select
if (document.getElementById("select1").selectedIndex == 0)
{
controllo = controllo && false;
messaggio += "Non hai specificato il Test" + "\n";
}
else
{
for(var i = 1; i <= 6; i++)
{
var v = document.getElementById("campo" + i);
if(!v.disabled && trim(v.value) == "")
{
controllo = controllo && false;
messaggio += "Il campo campo" + i + " è obbligatorio" + "\n";
}
}
//controlla2 restituisce un oggetto con 2 proprietà, booleano controllo e stringa messaggio
var r = controlla2();
controllo = controllo && r.controllo;
messaggio = messaggio + r.messaggio;
}
if(!controllo) alert(messaggio);
return controllo;
}
function trim(s) //questa funzione è rubata dalla Microsoft
{
var m = s.match(/^\s*(\S+(\s+\S+)*)\s*$/);
return (m == null) ? "" : m[1];
}
function test2(value)
{
var c11 = document.getElementById("hole1");
var c12 = document.getElementById("hole2");
var c13 = document.getElementById("hole3");
var c14 = document.getElementById("hole4");
var c15 = document.getElementById("hole5");
var c16 = document.getElementById("hole6");
if (value == '01') //predefinito
{
c11.disabled = true;
c12.disabled = true;
c13.disabled = true;
c14.disabled = true;
c15.disabled = true;
c16.disabled = true;
}
else if (value == '12')
{
c11.disabled = true;
c12.disabled = true;
c13.disabled = true;
c14.disabled = true;
c15.disabled = true;
c16.disabled = true;
}
else if (value == '23')
{
c11.disabled = true;
c12.disabled = false;
c13.disabled = true;
c14.disabled = true;
c15.disabled = true;
c16.disabled = false;
}
else if (value == '34')
{
c11.disabled = true;
c12.disabled = true;
c13.disabled = true;
c14.disabled = true;
c15.disabled = false;
c16.disabled = true;
}
else if (value == '45')
{
c11.disabled = false;
c12.disabled = true;
c13.disabled = true;
c14.disabled = true;
c15.disabled = false;
c16.disabled = false;
}
else if (value == '56')
{
c11.disabled = true;
c12.disabled = false;
c13.disabled = false;
c14.disabled = true;
c15.disabled = true;
c16.disabled = true;
}
for(var i = 1; i <= 6; i++)
{
var v = document.getElementById("hole" + i);
if(v.disabled) v.className = "rosso"; else v.className = "verde";
}
}
function controlla2()
{//debugger;
var controllo2 = true;
var messaggio2 = "";
//validazione select
var s = document.getElementById("campo7");
if (!s.disabled && s.selectedIndex == 0)
{
controllo2 = controllo2 && false;
messaggio2 += "Non hai specificato la prova" + "\n";
}
else
{
for(var i = 1; i <= 6; i++)
{
var v = document.getElementById("hole" + i);
if(!v.disabled && trim(v.value) == "")
{
controllo2 = controllo2 && false;
messaggio2 += "Il campo hole" + i + " è obbligatorio" + "\n";
}
}
}
//al chiamante servono sia il booleano controllo2, sia messaggio2
return {controllo:controllo2, messaggio:messaggio2};
}
// ]]>
</script>
</head>
<body >
<form id="prot" method="post" onsubmit="return controlla1(this)" action="a.aspx">
<select id="select1" onchange="test(this.value)">
<option value="0">scegli il test</option>
<option value="1">test1</option>
<option value="2">test2</option>
<option value="3">test3</option>
<option value="4">test4</option>
<option value="5">test5</option>
</select>
<input type="text" id="campo1" size="8" class="rosso" disabled="disabled" />
<input type="text" id="campo2" size="8" class="rosso" disabled="disabled" />
<input type="text" id="campo3" size="8" class="rosso" disabled="disabled" />
<input type="text" id="campo4" size="8" class="rosso" disabled="disabled" />
<input type="text" id="campo5" size="8" class="rosso" disabled="disabled" />
<input type="text" id="campo6" size="8" class="rosso" disabled="disabled" />
<select id="campo7" class="rosso" onchange="test2(this.value)" disabled="disabled">
<option value="01">scegli la prova</option>
<option value="12">prova1</option>
<option value="23">prova2</option>
<option value="34">prova3</option>
<option value="45">prova4</option>
<option value="56">prova5</option>
</select>
<input type="text" id="hole1" size="8" class="rosso" disabled="disabled" />
<input type="text" id="hole2" size="8" class="rosso" disabled="disabled" />
<input type="text" id="hole3" size="8" class="rosso" disabled="disabled" />
<input type="text" id="hole4" size="8" class="rosso" disabled="disabled" />
<input type="text" id="hole5" size="8" class="rosso" disabled="disabled" />
<input type="text" id="hole6" size="8" class="rosso" disabled="disabled" />
</p>
<input type="submit" value="Invia" name="Inv" /></p>
</form>
</body>
</html>
ps. se ci fossero altre select in cascata, forse bisognerebbe ripensare la soluzione