Jump to content

Dropdown Form Value


Aaron

Recommended Posts

The way my VA works is there are wings (hubs) with a number of squadrons in each wing. So on the registration form, the dropdown values for squadrons will have to change depending on what wing is selected. I don't know how I get the value of a dropdown later in the same form. The value I need is in red, but understandably doesn't work. I need to get the $wing->id for the option that is selected in requested wing field, to be passed to the requested quadron. Here is what I have:

<td>Requested Wing: *</td>

<td>

<select name="wing" id="wing">

<?php

foreach($allwings as $wing)

{

echo '<option value="'.$wing->id.'">'. $wing->name .'</option>';

}

?>

</select>

</td></tr><tr>

<td>Requested Squadron: *</td>

<td>

<select name="squadron" id="squadron">

<?php

foreach($allsquadrons as $squad)

{

if($squad->wing==$wing->id)

{

echo '<option value="'.$squad->id.'">'. $squad->name .'</option>';

}

}

?>

</select>

</td></tr>

Link to comment
Share on other sites

So you have 2 dropdown menus, and you would like the options for the second dropdown menu to be determined by the first one, just to be clear?

So for example dropdown one has A B C and if A is selected dropdown 2 has X, Y, Z but if B is selected it as S, T, V for example?

Link to comment
Share on other sites

This is what I have now, but it doesn't work yet, please help:

registration_mainform.tpl

 
<td>Requested Wing: *</td>
<td>
 <select name="wing" id="wing" onclick="getSquads()">
 <?php
 foreach($allwings as $wing)
 {
  echo '<option value="'.$wing->id.'">'. $wing->name .'</option>';

 }
 ?>
 </select>
</td></tr><tr>
<td>Requested Squadron: *</td>
<td>
 <select name="squadron" id="squadron"><div id="squads">
 <?php
 foreach($allsquadrons as $squad)
 {
     if($squad->wing==1)
	    {
echo '<option value="'.$squad->id.'">'. $squad->name .'</option>';
  }
 }
 ?>
 </div></select>
</td></tr>

registration_javascript.tpl

 
function getSquads(){
var wingid=document.getElementById('wing').value
 squads.innerHTML="";
<?php
 foreach($allsquadrons as $squad)
 {
?>
 if(wingid==<?php echo $squad->wing ?>){
  squads.innerHTML=+""
 }
<?php
 }
?>
}

Link to comment
Share on other sites

No need of Ajax here. You will need to code it in js so that the onchange event changes the dropdown menu. Use this example:

Drop Down Menu #1

|

Javascript onchange Event sends Menu #1 value to function "x" that determines the available values in Menu #2

|

Function "x" will evaluate the passed value. Using an If then statement it will determine the available values in Menu #2

|

Drop Down Menu #2 will show the values according to which value selected in Menu #1

-----------------------------------------------------------

to change the values in drop down menus, you will need to assign a unique id to each Dropdown. ex:

<select name="country" id="subcategory" >
<option value="usa">United States</option>

In the above example we used a unique id

subcategory

We will use that to change the value in that specific dropdown menu. To do that we do:

document.formname.subcategory.options[0]=new Option("Select Sub-Category","");

document.formname.subcategory.options[1]=new Option("Colleges","Colleges");

document.formname.subcategory.options[2]=new Option("Institutes","Institutes");

document.formname.subcategory.options[3]=new Option("Schools","Schools");

document.formname.subcategory.options[4]=new Option("Tuitions","Tuitions");

document.formname.subcategory.options[5]=new Option("Universities","Universities");

This will add 6 new values to the dropdown menu. the options are put in this format:

new Option([text that will show in the dropdown menu],[javascript value])

--------------------------------------------------------------

Now moving on to how a dropdown menu can affect another:

In this example we have 2 drop down menus(in html):

<select name="country" id="category"
onchange="javascript: dropdownlist(this.options[this.selectedIndex].value);">

<option value="usa">United States</option>
<option value="ca">Canada</option>
select name="college" id="subcategory" >
<option value=""></option>

The first dropdown menu(with id "Category") has two options, United States and Canada. The second (with id "subcategory") has no options because they will be determined later on. You may have also noticed that we have a onchange event on the first dropdown menu, this will send the value that is selected to a function that will evaluate it and output options for the second dropdown menu.

The function will look something like this:

function dropdownlist(listindex)
{
switch (listindex)
{
case "usa" :
document.formname.subcategory.options[0]=new Option("Select Sub-Category","");
document.formname.subcategory.options[1]=new Option("Yale University","yale");
document.formname.subcategory.options[2]=new Option("New York City University","nyc");
break;


case "ca" :

document.formname.subcategory.options[0]=new Option("Select Sub-Category","");

document.formname.subcategory.options[1]=new Option("University of Toronto","uot");

document.formname.subcategory.options[2]=new Option("Canadian University","cu");
}
}

Thats it! Now the selected country in the dropdown menu will affect which universities that will show in the 2nd dropdown.

If this helped, please like. Thanks!

Link to comment
Share on other sites

It's not working, but there are no errors. It does screw up another javascript script somehow though. Here is what I did:

 
<td>Requested Wing: *</td>
<td>
 <select name="wing" id="wing" onchange="javascript: getSquads(this.options[this.selectedIndex].value);">
 <?php
 foreach($allwings as $wing)
 {
  echo '<option value="'.$wing->id.'">'. $wing->name .'</option>';

 }
 ?>
 </select>
</td></tr><tr>
<td>Requested Squadron: *</td>
<td>
 <select name="squadron" id="squadron"><div id="squads">
 <?php
 foreach($allsquadrons as $squad)
 {
     if($squad->wing==1)
	    {
echo '<option value="'.$squad->id.'">'. $squad->name .'</option>';
  }
 }
 ?>
 </div></select>
</td></tr>

 
function getSquads(listindex)
{
squads.innerHTML="";
var cnt;
switch (listindex)
{
<?php
foreach($allwings as $wing)
{
?>
cnt=0;
case "<?php echo $wing->id ?>" :
<?php
 foreach($allsquadrons as $squad)
 {
 if($squad->wing==$wing->id)
 {
?>
document.register.squadron.options[cnt]=new Option("<?php echo $squad->name ?>","<?php echo $squad->id ?>");
cnt++;
<?php
 }
 }
?>
break();
<?php
}
?>
}
}

Link to comment
Share on other sites

Well, try this code instead:

<td>Requested Wing: *</td>
<td>
<select name="wing" id="wing" onchange="javascript: getSquads(this.options[this.selectedIndex].value);">
<?php
foreach($allwings as $wing)
{
echo '<option value="'.$wing->id.'">'. $wing->name .'</option>';

}
?>
</select>
</td></tr><tr>
<td>Requested Squadron: *</td>
<td>
<select name="squadron" id="squadron"><div id="squads">
</div></select>
</td></tr>

function getSquads(listindex)
{
var cnt = 0;
switch (listindex)
{
<?php
foreach($allwings as $wing)
{
?>
cnt=0;
case "<?php echo $wing->id ?>" :
<?php
foreach($allsquadrons as $squad)
{
if($squad->wing==$wing->id)
{
?>
document.register.squadron.options[cnt]=new Option("<?php echo $squad->name ?>","<?php echo $squad->id ?>");
cnt++;
<?php
}
}
?>
break();
<?php
}
?>
}

If that does not work then it could be that javascript and php dont mix together.

Link to comment
Share on other sites

  • 2 weeks later...

It works, but I cant put any php in it. Are there any other ideas? I can't put it in the form manually because there are custom nicknames for each squadron and the squadron leader can slightly change them if they want. For example change it from the "123 wolf squadron" to the "123 wolves". Is there a way that I can put the value of a javascript variable in the .insertHTML thing? something like this:

div.innerHTML="";

foreach (squadron within the selected wing as var squadron)

{

div.innerHTML='<option value=" ' squadron->id ' " ...

}

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...