(marx) writes:
> I have a bit of a problem and any help would be much appreciated.
>
> Problem: I have two dropdown list boxes with same data(all data
> driven).
You have two select elements with identical options.
> These are used for two separate entries.
I.e., you have *four* select elements with identical options,
grouped into two "entries".
> For every entry you cannot choose the same value twice.
> For example, I cannot choose for entry 1 the same
> value in both selection boxes (gqCategory1Entry1 and
> gqCategory2Entry1)
>
> This part works.
> The second entry is the problem: When I choose a value for Entry
> Two that is the same as in entry one it thinks that "Dubplicate
> Divisons have been selected").
So the code checks all select elements, not only the ones in the same
"entry".
> WHen in fact these are two separate entries.
>
> Code:
> <head>
> //Enry number one...no Duplicates
> function check_selection(elt){
> //check for duplicate selections
> var form=elt.form;
> var name=elt.name;
> var index=elt.selectedIndex
> //loop through all form elements
> for(var i=0;i<form.length;i++){
> var_name=form.elements[i].name;
> var_index=form.elements[i].selectedIndex;
These variables are not declared, so they become global variables.
No need for that. Put a "var" in front.
> if(var_name.substring(0,16)!='gqCategory'){
You only check that they have the same first 16 characters. That misses
the distinction between entries, which is much later in the name.
Example names:
gqCategory1Entry2
gqCategory1Entry1
The entry number is past the first 16 characters, and is never checked.
In case you ever need more than 9 or 10 categories or entries, let's
make this work for any number:
---
function check_selection(elt){
var gqCategoryRE = /^gqCategory(\d+)Entry(\d+)$/;
var index = elt.selectedIndex;
if (index == 0) {return true;} // always legal
var match = elt.name.match(gqCategoryRE);
if (!match) { return; } // not a gqCategory at all.
var category = +match[1];
var entry = +match[2];
var elems = elt.form.elements;
for (var i=0;i<elems.length;i++) {
if (elems[i] == elt) {continue;} // don't test self
match=elems[i].name.match(gqCategoryRE);
if ( match && entry == +match[2] && // same entry
index == elems[i].selectedIndex) { // same selectedIndex
alert("Duplicate division selected! Please choose again.");
elt.selectedIndex = 0;
elt.focus(0);
return false;
}
}
return true;
}
---
Tested in Opera 7 with the supplied select elements.
/L
--
Lasse Reichstein Nielsen -
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'