473,503 Members | 5,004 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Dynamic SELECT boxes with <OPTGROUP>s

I have two select boxes. When the user picks a value in the first one it
completely re-populates the second one. It works fine, but only generates a
standard OPTIONS list and I now want to group the options using OPTGROUPs.
<select name="Selector1" size="1"
onchange="reload2(this.options.selectedIndex, document.Form1.Selector2)">
<option .....
</select>

<script type="text/javascript">
function reload2(Index1, Selector2)
{
// Do not bother blanking '0', as it will always be re-written.
for (x1=Selector2.options.length-1; x1>0; x1--)
{
Selector2.options[x1]=null;
}

switch (Index1)
{
case 0: // Disclaimer
Selector2.options[0]=new Option("Disclaimer",
"disclaimer.html");
break;

case 1: // Chapter 1
Selector2.options[0]=new Option("Chapter 1 Title",
"chapter1.html");
Selector2.options[1]=new Option("Section 1.1",
"chapter1.html#1.1");
Selector2.options[2]=new Option("Section 1.2",
"chapter1.html#1.2");
Selector2.options[3]=new Option("Section 1.3",
"chapter1.html#1.3");
break;

....

case 99: // Chapter 99 - Stockists
Selector2.options[0]=new Option("Chapter 99 - Stockists",
"stockists.html");
Selector2.options[1]=new Option("USA - Arizona",
"stockists.html#USA-AZ");
Selector2.options[2]=new Option("USA - California",
"stockists.html#USA-CA");
Selector2.options[3]=new Option("USA - Colorado",
"stockists.html#USA-CO");
Selector2.options[4]=new Option("USA - Texas",
"stockists.html#USA-TX");
Selector2.options[5]=new Option("Belgium", "stockists.html#be");
Selector2.options[6]=new Option("France", "stockists.html#fr");
Selector2.options[7]=new Option("Germany", "stockists.html#de");
break;

default: // Unrecognised chapter.
alert("Chapter " + x + " is not available.");
Selector2.options[0]=new Option("Unknown", "unknown.html");
break;
}
Selector2.options[0].selected=true;
return true;
}
</script>

This works fine, and for chapter 99 it creates an options list like this:
<option selected value="stockists.html">Chapter 99 - Stockists</option>
<option value="stockists.html#USA-AZ">USA - Arizona</option>
<option value="stockists.html#USA-CA">USA - California</option>
<option value="stockists.html#USA-CO">USA - Colorado</option>
<option value="stockists.html#USA-TX">USA - Texas</option>
<option value="stockists.html#be">Belgium</option>
<option value="stockists.html#fr">France</option>
<option value="stockists.html#ge">Germany</option>

But as the list has grown, I want to group the items, like this:

<option selected value="stockists.html">Chapter 99 - Stockists</option>
<optgroup label="USA">
<option value="stockists.html#USA-AZ">Arizona</option>
<option value="stockists.html#USA-CA">California</option>
<option value="stockists.html#USA-CO">Colorado</option>
<option value="stockists.html#USA-TX">Texas</option>
</optgroup>
<optgroup label="Europe">
<option value="stockists.html#be">Belgium</option>
<option value="stockists.html#fr">France</option>
<option value="stockists.html#ge">Germany</option>
</optgroup>

Does anyone know how I can do this dynamically (client-side) ?

--
ce****@waitrose.com
Jul 20 '05 #1
5 35111
cedawe wrote:
I have two select boxes. When the user picks a value in the first one it
completely re-populates the second one. It works fine, but only generates a
standard OPTIONS list and I now want to group the options using OPTGROUPs.
[...]
Does anyone know how I can do this dynamically (client-side) ?


Using the W3C-DOM, it should be easy:

// create new option group
var oGroup = document.createElement('optgroup');
oGroup.value = "...";

// create new option (maybe you can/must use the Option(...) constructor)
var oOption = document.createElement('option');
oOption.value = "...";
oOption.text = "...";
...

// append the option to the option group
oGroup.appendChild(oOption);

// get a reference to the `select' element
var oSelect = document.forms[...].elements[...];

// append the option group
oSelect.appendChild(oGroup);

Untested, HTH.
PointedEars

Jul 20 '05 #2
I realize this is 6 months after the fact but...

This should read as

var oGroup = document.createElement('OPTGROUP');
oGroup.label = "..."; <===== Use ".label"

and ...

var oOption = document.createElement('OPTION');
oOption.value = "...";
oOption.innerText = "..."; <==== Use ".innerText"

oGroup.appendChild(blah!);
oSelect.appendChile(blah!);

....blah, blah!
I have only verified this behaviour on IE6.
Did anyone verify on Opera or NN?

"Thomas 'PointedEars' Lahn" <Po*********@web.de> wrote in message
news:bo*************@ID-107532.news.uni-berlin.de...
cedawe wrote:
I have two select boxes. When the user picks a value in the first one it completely re-populates the second one. It works fine, but only generates a standard OPTIONS list and I now want to group the options using OPTGROUPs. [...]
Does anyone know how I can do this dynamically (client-side) ?
Using the W3C-DOM, it should be easy:

// create new option group
var oGroup = document.createElement('optgroup');
oGroup.value = "...";

// create new option (maybe you can/must use the Option(...)

constructor) var oOption = document.createElement('option');
oOption.value = "...";
oOption.text = "...";
...

// append the option to the option group
oGroup.appendChild(oOption);

// get a reference to the `select' element
var oSelect = document.forms[...].elements[...];

// append the option group
oSelect.appendChild(oGroup);

Untested, HTH.
PointedEars

Jul 23 '05 #3
A. Nonymous wrote:
I realize this is 6 months after the fact but...
This should read as
var oGroup = document.createElement('OPTGROUP');
oGroup.label = "..."; <===== Use ".label"
var oOption = document.createElement('OPTION');
oOption.value = "...";
oOption.innerText = "..."; <==== Use ".innerText"
oGroup.appendChild(blah!);
oSelect.appendChile(blah!);
...blah, blah!
I have only verified this behaviour on IE6.
Did anyone verify on Opera or NN?


My Netscape 7.1 didn't like innerText, but it does like innerHTML, if
you change that line it works on my IE6, Netscape 7.1, Firefox 0.8.
Here's how I tested it:

<script type="text/javascript">
function populate() {
// create new option group
var oGroup = document.createElement('optgroup');
// get reference to the `select' element
var oSelect = document.getElementById('select1');
//document.forms['form1'].elements['select1'];
oGroup.label = 'group1';
for (var i=0; i<5; i++) {
// create new options
var oOption = document.createElement('option');
oOption.value = 'b'+i;
oOption.innerHTML = 'b'+i;
// append the option to the option group
oGroup.appendChild(oOption);
// append the option group
oSelect.appendChild(oGroup);
}
}
function show(oSelect,oSelectIndex){
alert('You selected '+oSelect[oSelectIndex].value);
}
</script>

<form name="form1" id="form1">
<select name="select1" id="select1" onclick="show(this,this.selectedIndex)">
<option value='a0'>a0</option>
<option value='a1'>a1</option>
<option value='a2'>a2</option>
<option value='a3'>a3</option>
<option value='a4'>a4</option>
</select>
<p>
<input type="button" onclick="populate()" value="Add Select Options">
</form>

Mike

Jul 23 '05 #4
mscir wrote:
A. Nonymous wrote:
I realize this is 6 months after the fact but...
This should read as
var oGroup = document.createElement('OPTGROUP');
oGroup.label = "..."; <===== Use ".label"
var oOption = document.createElement('OPTION');
oOption.value = "...";
oOption.innerText = "..."; <==== Use ".innerText"
oGroup.appendChild(blah!);
oSelect.appendChile(blah!);
...blah, blah!
I have only verified this behaviour on IE6.
Did anyone verify on Opera or NN?
My Netscape 7.1 didn't like innerText, but it does like innerHTML, if
you change that line it works on my IE6, Netscape 7.1, Firefox 0.8.
Here's how I tested it:

<script type="text/javascript">
function populate() {
// create new option group
var oGroup = document.createElement('optgroup');
// get reference to the `select' element
var oSelect = document.getElementById('select1');
//document.forms['form1'].elements['select1'];
oGroup.label = 'group1';
for (var i=0; i<5; i++) {
// create new options
var oOption = document.createElement('option');
oOption.value = 'b'+i;
oOption.innerHTML = 'b'+i;


oOption.appendChild(document.createTextNode('b'+i) );

In cases like these, where the content is not too complicated (and not likely to
become complicated), I prefer document.createTextNode() to setting .innerHTML.
Any standards compliant browser that understands document.createElement() is
more likely to understand document.createTextNode() then .innerHTML. Making this
minor change removes any dependancy on proprietary attributes from your script.

That said, if I'm attempting to display extremely complicated, dynamically
created content, I typically use .innerHTML since it is such a huge pain to
construct complicated HTML using the standard methods. It also lets me write
code that can usually work on Netscape 4, since the same string can be output
using document.write().
// append the option to the option group
oGroup.appendChild(oOption);
// append the option group
oSelect.appendChild(oGroup);
}
}
function show(oSelect,oSelectIndex){
alert('You selected '+oSelect[oSelectIndex].value);
}
</script>

<form name="form1" id="form1">
<select name="select1" id="select1" onclick="show(this,this.selectedIndex)">
<option value='a0'>a0</option>
<option value='a1'>a1</option>
<option value='a2'>a2</option>
<option value='a3'>a3</option>
<option value='a4'>a4</option>
</select>
<p>
<input type="button" onclick="populate()" value="Add Select Options">
</form>

Mike


--
| Grant Wagner <gw*****@agricoreunited.com>

* Client-side Javascript and Netscape 4 DOM Reference available at:
*
http://devedge.netscape.com/library/...ce/frames.html

* Internet Explorer DOM Reference available at:
*
http://msdn.microsoft.com/workshop/a...ence_entry.asp

* Netscape 6/7 DOM Reference available at:
* http://www.mozilla.org/docs/dom/domref/
* Tips for upgrading JavaScript for Netscape 7 / Mozilla
* http://www.mozilla.org/docs/web-deve...upgrade_2.html
Jul 23 '05 #5
A. Nonymous wrote:
This should read as

var oGroup = document.createElement('OPTGROUP');
oGroup.label = "..."; <===== Use ".label"
Correct.

<http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-38450247>
<http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/label_1.asp>
and ...

var oOption = document.createElement('OPTION');
oOption.value = "...";
oOption.innerText = "..."; <==== Use ".innerText"
No, the proper property identifier as defined in DOM Level 0 (IE3+, NN3+) is
indeed "text". "innerText" is possible in IE, but in no way cross-browser.

<http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/option.html>
<http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/text_3.asp>
[...]


Please do not top-post, see the FAQ.
PointedEars
Jul 23 '05 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
6475
by: Ron Lounsbury | last post by:
I have a customer who has requested that I add "popup" text (a la ToolTips) to a couple of pulldown lists in a DHTML form we have in our project. He says - Just use the ALT tag. I went and double...
10
7623
by: Ryan McGeary | last post by:
In a <select> drop-down, the onchange event isn't called when scrolling through the dropdown using the mouse-wheel and when crossing over a new <optgroup>. Using the example below, notice how...
2
2003
by: VK | last post by:
A while ago there was a discussion how to implement a select list that would call a function right upon new selection is being made w/o clicking any additional buttons: ...
1
2776
by: Stewart Cambridge London, UK | last post by:
I've been having some trouble with a set of <select><optgroup><option> dropdowns. I've been experimenting with the disabled attribute in the <optgroup> and <option> tags. Seems to work in NN...
44
2790
by: rhythmace | last post by:
W3C HTML validator passes this: .... <script type="text/javascript" src="foo.js"> <script type="text/javascript"> ....script in here... </script> ....
2
1638
by: PW | last post by:
Is it possible to make a select list item red based on a condition ? TIA, PW
1
5035
by: madflytom | last post by:
Hello, I'm trying to move the options of one select list to another select list. The "source" select list is divided into optgroups, and the "target" select list is not. I want to somehow keep...
5
13302
matheussousuke
by: matheussousuke | last post by:
Hello, I'm using tiny MCE plugin on my oscommerce and it is inserting my website URL when I use insert image function in the emails. The goal is: Make it send the email with the URL...
0
1956
by: atencorps | last post by:
Hello I have the following code but need some help on it. The idea of the code is the main sections ie Service Management are viewable when the page is loaded and by clicking on the main...
0
7188
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
7063
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
7258
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
7313
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
1
6970
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
5558
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
4663
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
0
3146
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
0
366
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.