Display dropdown items based on each other

1) I have two descents with exactly the same values. I want dropdown 2 to display values ​​based on selection of items of dropdown 1. So the selected index of dropdown 2 will be equal to or greater than the selected index of dropdown 1. (this code works)

but when I add another snapshot and based on its items, the other two dropdowns should behave like:

2) If I select TCD in the first dropdown and change the value of B in the second dropdown, the value should be B in the third dropdown, but if I select BCD from the first dropdown it should keep the values ​​of the other two dropdowns from the previous selection (not should go back to A)

The first part works, but the second part has problems.

Fiddle: 1) http://jsfiddle.net/wtLm4805/2/

A script with three dropdowns: 2) http://jsfiddle.net/wtLm4805/3/

 while (select2.firstChild) {
    select2.removeChild(select2.firstChild);
}

for (var i = 0; i < select1.options.length; i++) {
    var o = document.createElement("option");
    o.value = select1.options[i].value;
    o.text = select1.options[i].text;
    (i < select1.selectedIndex) 
? o.disabled = true 
: o.disabled = false ;        
    select2.appendChild(o);
}

      

Where am I going wrong?

+3


source to share


2 answers


Since you only have one element with a class SELECTA

and one with a class SELECTB

, they will always be undefined:

var select1 = document.getElementsByClassName("SELECTA")[1];
var select2 = document.getElementsByClassName("SELECTB")[1];
var select1 = document.getElementsByClassName("SELECTA")[2];
var select2 = document.getElementsByClassName("SELECTB")[2];

      

If you're trying to target parameters, you can wrap the classes on the parameters themselves, or you can reference them like this:

document.getElementsByClassName("SELECTA")[0].options[1]

      



Not sure why you are removing / adding items to the element SELECTB

, but is this what you are going to do?

function clickButton() {
  var Type= document.getElementById('Type');
  var select1= document.getElementById('SELECTA');
  var select2= document.getElementById('SELECTB');

  if(Type.value === 'TCD') {
    for(var i = 0 ; i < select1.options.length ; i++) {
      select2.options[i].disabled= i < select1.selectedIndex;
    }
    select2.value= select1.value;
  }
  else {
    for(var i = 0 ; i < select2.options.length ; i++) {
      select2.options[i].disabled= false;
    }
  }
}
      

<select name="Type" id="Type" onchange="clickButton()">
  <option value="TCD">TCD</option>
  <option value="MCD">MCD</option>
  <option value="BCD">BCD</option>
</select>

<select id="SELECTA" onchange="clickButton()">
  <option value="A">A</option>
  <option value="B">B</option>
  <option value="C">C</option>
  <option value="D">D</option>
</select>

<select id="SELECTB">
  <option value="A">A</option>
  <option value="B">B</option>
  <option value="C">C</option>
  <option value="D">D</option>
</select>
      

Run code


0


source


You can go somewhere along these lines



var typeValue = 'TCD'; // default initialisation

$('#Type').change(function(){
    var value = $(this).val();
    console.log(value);
    if(value == 'TCD')
    {
        typeValue = 'TCD';
        // change something in other selects too
    }
    else if(value == 'MCD')
    {
        typeValue = 'MCD';
    }
    else if(value == 'BCD')
    {
        $('#SELECTA').val('B');
        $('#SELECTB').val('B');
        typeValue = 'BCD';
    }
    
});

$('#SELECTA').change(function(){
    var value = $(this).val();
    console.log(value);
    if(typeValue = 'TCD')
    {
        $('#SELECTB').val(value);
    }
});
      

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<select name="Type" id="Type"  >
     <option value="TCD">TCD</option>
     <option value="MCD" >MCD</option>
     <option value="BCD" >BCD</option>
  </select>

<select id="SELECTA" class="SELECTA">
    <option value="A">A</option>
    <option value="B">B</option>
    <option value="C">C</option>
    <option value="D">D</option>
</select>
<select id="SELECTB" class="SELECTB"  >
    <option value="A">A</option>
    <option value="B">B</option>
    <option value="C">C</option>
    <option value="D">D</option>
</select>
      

Run code


0


source







All Articles