Solved

Default Value of select

Posted on 2004-04-04
6
1,823 Views
Last Modified: 2008-03-10
I have a validation to check whether the value in the form is changed. I have a problem when the component is a select. I have written a javascript but it is not working in some cases.
My funciton is:

function isChanged() {
 for(i=0;i<document.forms[0].elements.length;i++) {
    if(document.forms[0].elements[i].type=="select-one) {
        for(j=0;j<document.forms[0].elements[i].options.length;j++) {
            if(document.forms[0].elements[i].options[j].selected !=
                        document.forms[0].elements[i].options[j].defaultSelected) {
                return true;
          }
        }
    }
 }
}

In my case i dont have a default value selected in the combo box. I am using the html:select.
0
Comment
Question by:kanuaravind
6 Comments
 
LVL 7

Expert Comment

by:gam3r_3xtr3m3
ID: 10751969
maybe...:

function isChanged() {
 for(i=0;i<document.forms[0].elements.length;i++) {
    if(document.forms[0].elements[i].type=="select") {
        for(j=0;j<document.forms[0].elements[i].options.length;j++) {
            if(document.forms[0].elements[i].options[j].selected !=
                      document.forms[0].elements[i].options[j].defaultSelected) {
                return true;
         }
        }
    }
 }
}

gam3r
0
 
LVL 12

Expert Comment

by:lil_puffball
ID: 10752188
If you use defaultSelected, you must have

<option selected>

If you don't, it won't work.
You can assume that the default selected is 0, though, since if you don't specify it, the browser will automatically make it option 0. So you can use this code:

function isChanged() {
var selIndex=0;
 for(i=0;i<document.forms[0].elements.length;i++) {
    if(document.forms[0].elements[i].type=="select-one") {
        for(j=0;j<document.forms[0].elements[i].options.length;j++) {
            if(document.forms[0].elements[i].options[j].defaultSelected){selIndex=j;}
        }
        if(document.forms[0].elements[i].options.selectedIndex!=selIndex){return true;}
    }
 }
return false;
}
0
 
LVL 15

Expert Comment

by:VincentPuglia
ID: 10752198
Hi,

  If you are using a select, the default value is usually option[0].  So, you should only need to check the selectedIndex:

function isChanged()
{
   for(i=0;i<document.forms[0].elements.length;i++)
  {
      if(document.forms[0].elements[i].type=="select-one)
     {
         var selObj = document.forms[0].elements[i];
         if (! selObj.options[0].selected)
             return true;
      }
  }
}

Vinny
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 7

Accepted Solution

by:
brgivens earned 150 total points
ID: 10752851
Vinny's right, you only need to check the selectedIndex.  His code won't work though - try this:

function isChanged() {
 var i,o;
 for(i=0;i<document.forms[0].elements.length;i++) if((o=document.forms[0].elements[i]).type=="select-one" && !o.options[o.selectedIndex].defaultSelected) return true;
 return false;
}
0
 
LVL 15

Expert Comment

by:VincentPuglia
ID: 10753084
Hi brgivens,

  I admit I didn't test what I had written until your last post.  It works for me (as long as the quote is closed -- 'select-one')

<script type='text/javascript'>
function isChanged()
{
   for(i=0;i<document.forms[0].elements.length;i++)
   {
      if(document.forms[0].elements[i].type=="select-one")
     {

alert(selObj.options[0].selected)

         var selObj = document.forms[0].elements[i];
         if (! selObj.options[0].selected)
             return (true);
      }
  }
}
//-->
</script>
</head>
<body>
<form onsubmit='isChanged()'>
<select>
<option >select</option>
<option >select</option>
<option >select</option>
</select>
<input type="submit">
</form>

The presumption I am making is that the first option is the default.

Vinny
0
 
LVL 7

Expert Comment

by:brgivens
ID: 10849284
Thanks for the points!  Why the B?
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Avoid defining the variables in the global scope; trying to define them in a local function scope. Because:   • Look-up is performed every time a variable is accessed.   • Variables are resolved backwards from most specific to least specific scope…
This article discusses the difference between strict equality operator and equality operator in JavaScript. The Need: Because JavaScript performs an implicit type conversion when performing comparisons, we have to take this into account when wri…
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…

937 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now