Skip to content Skip to sidebar Skip to footer

Why Is My Switch Statement Running Multiple Cases?

I have the following function: $('#drpType').change(function () { var SelectedVal = this.value; switch (SelectedVal) { case '2021': console.log('a');

Solution 1:

It's because you don't have a break statement. Without it, the code will "fall through".

var x = 10;
switch (x) {
  case10:
    console.log('With break');
    break;
    
  case20:
    console.log('I never run');
    break;
}

console.log('-------');

switch (x) {
  case10:
    console.log('Without');
  case20:
    console.log('a break');
  case30:
    console.log('it just');
  case40:
    console.log('keeps going');
}

The reason this exists is because sometimes it's useful to fall through. You could imagine a case where you're updating the state of a game and what stuff to happen for a specific kind of enemy as well as for all enemies.

var characterType = 'big boss';

switch (characterType) {
  case'big boss':
    console.log('Update the big boss');
  
  case'enemy':
    console.log('The big boss is also an enemy so run the basic enemy code');
    break;
    
  case'player':
    console.log('The boss is not a player so we will not run this.');
    break;
}

It's not incredibly common to utilize fall-through but it does have its use cases.

Finally, here's what your code should look like:

$("#drpType").change(function () {
    varSelectedVal = this.value;
    switch (SelectedVal) {
        case"2021":
            console.log('a');
            console.log('b');
            break; // <--case"2020":
            console.log('a');
            break; // <--case"ADB":
            console.log('b');
            break; // <--case"PWP":
            console.log('c');
            break; // optional. It's visually consistent but doesn't do anything
    }
}

Solution 2:

You are missing your break; statements on each of your cases:

$("#drpType").change(function () {
    varSelectedVal = this.value;
    switch (SelectedVal) {
        case"2021":
            console.log('a');
            console.log('b');
            break;
        case"2020":
            console.log('a');
            break;
        case"ADB":
            console.log('b');
            break;
        case"PWP":
            console.log('c');
            break;
    }

Post a Comment for "Why Is My Switch Statement Running Multiple Cases?"