// create a temporary "shortcut"
var form = document.dualmenus
// how many options are there?
var groups = form.sites.options.length;
// create a new array with that many elements
var group = new Array(groups);// for each array element created
above
// create a new array of unspecified length for that array element
for (i = 0; i < groups; i++) group[i] = new Array();
// Option objects can be created dynamically with the Option() constructor
// new Option(text, value, defaultSelected, selected)
group[0][0] = new Option("CNET", "http://www.cnet.com");
group[0][1] = new Option("News.com", "http://www.news.com");
group[0][2] = new Option("Wired News", "http://www.wired.com");
group[1][0] = new Option("CNN", "http://www.cnn.com");
group[1][1] = new Option("ABC News", "http://www.abcnews.com");
group[2][0] = new Option("Hotbot", "http://www.hotbot.com");
group[2][1] = new Option("Infoseek", "http://www.infoseek.com");
group[2][2] = new Option("Excite", "http://www.excite.com");
group[2][3] = new Option("Lycos", "http://www.lycos.com");
var Links = form.links; // create a temporary "links"
shortcut
function redirect(index) {
// "null out" all the options
associated with the links menus
for (m = Links.options.length
- 1; m > 0; m--) Links.options[m] = null;
// fill up the links options with the
appropriate text & values from the above 2D arrays
for (i = 0; i < group[index].length;
i++) {
Links.options[i] = new
Option(group[index][i].text,
group[index][i].value);
}
// make the first links option the selected
item
Links.options[0].selected
= true;
}
Configuring the script: The first thing you'll need to do
is change the contents of the first selection list to reflect the "main
categories" you'll want to use. Below shows the code pertaining to that:
<FORM NAME="dualmenus">
<SELECT NAME="sites" onChange="redirect(this.selectedIndex);">
<OPTION>Technology Sites
<OPTION>News Sites
<OPTION>Search Engines
</SELECT>
Change the text in read, add in more <OPTION>
tags etc.
Next, you need to define (using HTML) the links associated with the first
category. The code for this looks like this:
<SELECT NAME="links" onChange="location.href=options[selectedIndex].value">
<OPTION VALUE="http://www.cnet.com">CNET
<OPTION VALUE="http://www.news.com">News.com
<OPTION VALUE="http://www.wired.com">Wired
News
</SELECT>
<INPUT TYPE="button" VALUE="Go!" onClick="go2();">
</FORM>
Change those to reflect the links associated with your first category. Add
in more <option> tags if necessary.
In the above demo, we know that it contains three categories, the first
one with three links, the second one with 2 links, and the third with 4 links. These links
are contained as two dimensional array elements:
//group 1
group[0][0] = new Option("CNET", "http://www.cnet.com")
group[0][1] = new Option("News.com", "http://www.news.com")
group[0][2] = new Option("Wired News", "http://www.wired.com")
//group 2
group[1][0] = new Option("CNN", "http://www.cnn.com")
group[1][1] = new Option("ABC News", "http://www.abcnews.com")
//group 3
group[2][0] = new Option("Hotbot", "http://www.hotbot.com")
group[2][1] = new Option("Infoseek", "http://www.infoseek.com")
group[2][2] = new Option("Excite", "http://www.excite.com")
group[2][3] = new Option("Lycos", "http://www.lycos.com")
The text in red represent the text of each selection, and its associated
URL, respectively. Since we have three categories in our demo, we have three groups of
link. Obviously, your combo will not necessarily follow this structure, so its important
to know how to set up the variables accordingly.
group[0][0] =
new Option("JavaScript Site", "http://www.JavaScript.com")
The blue 0 indicates which category the
variable belong to (0 = first, 1 = second etc), and the red 0
indicates the variable's position within the category. |