1999
Multiple, Hierarchical SelectBoxes
No documentation here, other that the comments in the source. It's the typical multiple select box thing. There is probably a much better way to do this. This is my way.
HTML
<form name="PlaceHold" action="./">
<select name="foo" size="5"
onchange="changeSecondSelect('PlaceHold','foo','bar');clearSelect('PlaceHold','splorch');">
<option>Choose One...</option>
<option value="1">red</option>
<option value="2">green</option>
<option value="3">blue</option>
</select>
<select name="bar" size="5" onchange="changeSecondSelect('PlaceHold','bar','splorch');">
<option>Choose One...</option>
<option value=""> </option>
</select>
<select name="splorch" size="5">
<option>Choose One...</option>
<option value=""> </option>
</select>
</form>
Source Code
<script type="text/javascript" language="JavaScript">
<!--
function changeSecondSelect(formName,firstSelect,secondSelect) {
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//make the first value in the second select selected
// document [formName] [secondSelect].selectedIndex=0;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// delete all the options in the second select BUT the first one
while(document[formName][secondSelect].options[1])
document [formName] [secondSelect].options[1] = null;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// create the arrays which will hold the information
// to populate the second select
var plopValues = new Array (0);
var plopWords = new Array (0);
plopValues.length = 0;
plopWords.length = 0;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// the syntax for the value selected in the first select is ugly, so we
// put it in a temp variable
var firstSelectValue = document [formName] [firstSelect].options[document [formName][firstSelect].selectedIndex].value;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// each linked select pair will need a set of if/thens.
// if ((firstSelectValue =="#value of the first select#") && (secondSelect == '#variable name of the Second Select#')) {
// # this array is the values keyed to the value of the first select#
// var plopValues = new Array ('1','2','3');
// # this array is the human readable value of the possibilites#
// var plopWords = new Array ('Blood','Wine','Pasta Sauce');
// };
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if ((firstSelectValue =="1") && (secondSelect == 'bar')) {
var plopValues = new Array ('1','2','3');
var plopWords = new Array ('kickball','rose','heart');
};
if ((firstSelectValue =="2") && (secondSelect == 'bar')) {
var plopValues = new Array ('4','5','6');
var plopWords = new Array ('grass','leaves','mold');
};
if ((firstSelectValue =="3") && (secondSelect == 'bar')) {
var plopValues = new Array ('7','8','9');
var plopWords = new Array ('the sky','the ocean','smurfs');
};
if ((firstSelectValue =="1") && (secondSelect == 'splorch')) {
var plopValues = new Array ('1','2','3');
var plopWords = new Array ('kicking','throwing','bouncing');
};
if ((firstSelectValue =="2") && (secondSelect == 'splorch')) {
var plopValues = new Array ('1','2','3');
var plopWords = new Array ('smelling','appreciating','trimming');
};
if ((firstSelectValue =="3") && (secondSelect == 'splorch')) {
var plopValues = new Array ('1','2');
var plopWords = new Array ('beating','pumping');
};
if ((firstSelectValue =="4") && (secondSelect == 'splorch')) {
var plopValues = new Array ('1','2','3');
var plopWords = new Array ('smelling','mowing','weedwhacking');
};
if ((firstSelectValue =="5") && (secondSelect == 'splorch')) {
var plopValues = new Array ('1','2');
var plopWords = new Array ('raking','tracing');
};
if ((firstSelectValue =="6") && (secondSelect == 'splorch')) {
var plopValues = new Array ('1');
var plopWords = new Array ('disinfecting');
};
if ((firstSelectValue =="7") && (secondSelect == 'splorch')) {
var plopValues = new Array ('1','2');
var plopWords = new Array ('falling','crying');
};
if ((firstSelectValue =="8") && (secondSelect == 'splorch')) {
var plopValues = new Array ('1','2','3');
var plopWords = new Array ('rising','blue','salty');
};
if ((firstSelectValue =="9") && (secondSelect == 'splorch')) {
var plopValues = new Array ('1','2','3');
var plopWords = new Array ('blue','papa','lady');
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// if we didn't get a real value, then we show an error message
// in the second select
if (firstSelectValue == "")
{ var plopValues = new Array ('','','');
var plopWords = new Array (' * Please',' make a',' choice.'); };
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// now the array that was set cascades into the second select
for (var i=0;i<plopWords.length;i++)
{ var optionAtor=new Option(plopWords[i],plopValues[i])
document[formName][secondSelect].options[i+1]=optionAtor;
}
};
function clearSelect(formName,whichOnes) {
var plopValues = new Array ('','','');
var plopWords = new Array ('','','');
for (var i=0;i<plopWords.length;i++)
{
var optionAtor=new Option(plopWords[i],plopValues[i])
document[formName][whichOnes].options[i+1]=optionAtor;
}
};
//-->
</script>