Javascript function to change form fields

Hi - I wonder if anyone can help with what is hopefully a simple javascript request - if such a thing exists!

What I want to do is to examine a pair of fields - lets call them F1 and F2 - both of which are select boxes and both of which can have the values of "Yes" and "No".

If F1 is set to "Yes" then F2 must be set to "No" and vice versa. Now, I could probably do this using the form name and form field names and so on via the onchange event, but it struck me that there must be some way of writing a generic script that would allow you to pass the relevant parameters and cause the setting of the companion field to be the opposite.

So, the script being called doesn't know the form name (or ID) and doesn't know the field names/ids and doesn't know the value pairs - these all being passed at onchange time.

Does anyone know how I pass the fields to the JS function? For example if I have:

<form name="form1">
  <select name="f1" OnChange="change_values(this)">
      <option value="Yes">Yes</option>
      <option value="No">No</option>
  </select>
  <select name="f2" OnChange="change_values(this)">
      <option value="Yes">Yes</option>
      <option value="No">No</option>
  </select>

Open in new window


And the javascript...

 <script type="text/javascript">
  function change_values(form_field)
  {
  if (formfield.form.f1.value == "Yes"){
  formfield.form.f2.value = "No"
  }
else{
  formfield.form.f2.value = "Yes"
  }
  }
  </script>

Open in new window


But I don't want to hard code F1 or F2 or "Yes" or "No" and my JS is pretty basic!

Many thanks
highlawnAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Sudhindra A NCommented:
if you don't want to hard code 'F1' and 'F2',  still you can pass references to the javascript function. In this case you need to use some server side coding (languages like ColdFusion, PHP, asp etc)  for dynamic name.

but if it is a static html page then you have to hard code.
0
highlawnAuthor Commented:
Sorry, I should have said that. I am coding everything using PHP - with which I am very familiar - and I want to generate the requisite javascript call within the PHP.

I would rather expect though, that the javascript function could be written once and included in the <head> of the page and then called via the PHP code as you are creating the <select> statements.
0
Michel PlungjanIT ExpertCommented:
I would firstly use radios since that makes more sense when you have mutually exclusive field

Here is an example on how it could be done:

DEMO

window.onload=function() {
    change_values(<?php echo "document.forms[0]".$field1Name.",document.forms[0].".$field2Name; ?>);
}    

function change_values(a,b) {
    b.selectedIndex=!a.selectedIndex;
}    

<form name="form1">
  <select name="<?php echo $field1Name; ?>" onChange="change_values(this,this.form.<?php echo $field2Name; ?>)">
      <option value="Yes">Yes</option>
      <option value="No">No</option>
  </select>
  <select name="<?php echo $field2Name; ?>" onChange="change_values(this,this.form.<?php echo $field1Name; ?>)">

      <option value="Yes">Yes</option>
      <option value="No">No</option>
  </select>
</form>  

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Why Diversity in Tech Matters

Kesha Williams, certified professional and software developer, explores the imbalance of diversity in the world of technology -- especially when it comes to hiring women. She showcases ways she's making a difference through the Colors of STEM program.

highlawnAuthor Commented:
OK - that looks good. I fully understand the html - so, no issues there.

I think I understand the function - except I am not familiar with the selectedIndex property. Can you expand on what this is and when it can be used? Many Thanks.

Also, why do we need the window.onload piece? What if this form isn't loaded?

Cheers
0
Michel PlungjanIT ExpertCommented:
I am using a trick since the selected index (index of the selected value in the drop down) is either 0 (yes) or 1 (no) in your case and !1 is 0 (NOT 1)  and !0 is 1so I negate the othe select on change
The on load is to initialise this situation so if select1 is yes, the script set select2 to no
0
highlawnAuthor Commented:
OK - many thanks. Just what I was looking for. Perhaps you could indulge me just a touch further.

I'm assuming that "this" refers to the current field on the current form in this particular instance - i.e. the object with focus? If that is the case, then how does "this.form.field2" refer to the other field?

I would have thought that would be the equivalent of writing this.form.field1.form.field2 - if you see what I mean. Or does the "this" refer to a higher object?

Thanks
0
Michel PlungjanIT ExpertCommented:
this is the select this.form is the select's parent form and this.form.field2 is the sibling field where field2 is the actual field name but this.form are generic abstract object identifiers hence the php only tells the field name
0
highlawnAuthor Commented:
OK - I think I get that. Many thanks for your help. I'll award the points.
0
highlawnAuthor Commented:
Neat and simple and what I was after
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Scripting Languages

From novice to tech pro — start learning today.