Duplicate values in drop down list box

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • marx

    Duplicate values in drop down list box

    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).
    These are used for two separate 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 (gqCategory1Ent ry1 and
    gqCategory2Entr y1)

    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").

    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.selec tedIndex
    //loop through all form elements
    for(var i=0;i<form.leng th;i++){
    var_name=form.e lements[i].name;
    var_index=form. elements[i].selectedIndex;
    if(var_name.sub string(0,16)!=' gqCategory'){
    // if form element is not the current element
    // and the division name is the same, raise
    //error message
    if(var_name!=na me&&index!=0&&v ar_index==index ){
    alert(var_name) ;
    alert("Duplicat e divisions selected! Please choose again.");
    elt.selectedInd ex=0;
    elt.focus();
    return false;
    }
    }
    }
    return true;
    }


    </head>

    Entry one:
    <select name="gqCategor y1Entry1" maxlength="48" tabindex = 20
    onChange="check _selection(this )" maxlength="48">
    <option value="-1"> ---Select a Category---
    <option value=1.1 > Division - 1.1 - Internet Sites
    <option value=1.2 > Division - 1.2 - Intranet Sites
    <option value=1.3 > Division - 1.3 - Interactive communication
    </select>
    <select name="gqCategor y2Entry1" maxlength="48" tabindex = 20
    onChange="check _selection(this )" maxlength="48">
    <option value="-1"> ---Select a Category---
    <option value=1.1 > Division - 1.1 - Internet Sites
    <option value=1.2 > Division - 1.2 - Intranet Sites
    <option value=1.3 > Division - 1.3 - Interactive communication
    </select>
    ------------
    Entry TWO:
    <select name="gqCategor y1Entry2" maxlength="48" tabindex = 20
    onChange="check _selection(this )" maxlength="48">
    <option value="-1"> ---Select a Category---
    <option value=1.1 > Division - 1.1 - Internet Sites
    <option value=1.2 > Division - 1.2 - Intranet Sites
    <option value=1.3 > Division - 1.3 - Interactive communication
    </select>
    <select name="gqCategor y2Entry2" maxlength="48" tabindex = 20
    onChange="check _selection(this )" maxlength="48">
    <option value="-1"> ---Select a Category---
    <option value=1.1 > Division - 1.1 - Internet Sites
    <option value=1.2 > Division - 1.2 - Intranet Sites
    <option value=1.3 > Division - 1.3 - Interactive communication
    </select>
  • Lasse Reichstein Nielsen

    #2
    Re: Duplicate values in drop down list box

    marx@idiom.com (marx) writes:
    [color=blue]
    > 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).[/color]

    You have two select elements with identical options.
    [color=blue]
    > These are used for two separate entries.[/color]

    I.e., you have *four* select elements with identical options,
    grouped into two "entries".
    [color=blue]
    > 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 (gqCategory1Ent ry1 and
    > gqCategory2Entr y1)
    >
    > 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").[/color]

    So the code checks all select elements, not only the ones in the same
    "entry".
    [color=blue]
    > 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.selec tedIndex
    > //loop through all form elements
    > for(var i=0;i<form.leng th;i++){
    > var_name=form.e lements[i].name;
    > var_index=form. elements[i].selectedIndex;[/color]

    These variables are not declared, so they become global variables.
    No need for that. Put a "var" in front.
    [color=blue]
    > if(var_name.sub string(0,16)!=' gqCategory'){[/color]

    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:
    gqCategory1Entr y2
    gqCategory1Entr y1

    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.selectedInd ex;
    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.elemen ts;
    for (var i=0;i<elems.len gth;i++) {
    if (elems[i] == elt) {continue;} // don't test self
    match=elems[i].name.match(gqC ategoryRE);
    if ( match && entry == +match[2] && // same entry
    index == elems[i].selectedIndex) { // same selectedIndex
    alert("Duplicat e division selected! Please choose again.");
    elt.selectedInd ex = 0;
    elt.focus(0);
    return false;
    }
    }
    return true;
    }
    ---

    Tested in Opera 7 with the supplied select elements.
    /L
    --
    Lasse Reichstein Nielsen - lrn@hotpop.com
    DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleD OM.html>
    'Faith without judgement merely degrades the spirit divine.'

    Comment

    Working...