Duplicate values in drop down list box

Discussion in 'Javascript' started by marx, Nov 17, 2003.

  1. marx

    marx Guest

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

    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.name;
    var_index=form.elements.selectedIndex;
    if(var_name.substring(0,16)!='gqCategory'){
    // if form element is not the current element
    // and the division name is the same, raise
    //error message
    if(var_name!=name&&index!=0&&var_index==index){
    alert(var_name);
    alert("Duplicate divisions selected! Please choose again.");
    elt.selectedIndex=0;
    elt.focus();
    return false;
    }
    }
    }
    return true;
    }


    </head>

    Entry one:
    <select name="gqCategory1Entry1" 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="gqCategory2Entry1" 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="gqCategory1Entry2" 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="gqCategory2Entry2" 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>
    marx, Nov 17, 2003
    #1
    1. Advertising

  2. (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.name;
    > var_index=form.elements.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 == elt) {continue;} // don't test self
    match=elems.name.match(gqCategoryRE);
    if ( match && entry == +match[2] && // same entry
    index == elems.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.'
    Lasse Reichstein Nielsen, Nov 17, 2003
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. SirPoonga
    Replies:
    2
    Views:
    751
    Ben Strackany
    Jan 7, 2005
  2. weiwei
    Replies:
    0
    Views:
    1,009
    weiwei
    Jan 5, 2007
  3. msimmons
    Replies:
    0
    Views:
    470
    msimmons
    Jul 16, 2009
  4. Replies:
    5
    Views:
    266
  5. Replies:
    3
    Views:
    284
Loading...

Share This Page