0

I have a select list that will be filled with date of birth ranges, and each one will have a specific answer that will need returning, I am a beginner with javascript and have managed to get it to wor how I want using an if else statement.

the problem is that this list will need to have 40 entries and subsequently 40 answers, which will lead to one hell of a big if statement.

can anyone suggest a simplified way of coding this.

thanks.

<body>
<select id="DobRange">
<option value="" >Please select a date range</option>
<option value="1" >Dob range 1</option>
<option value="2" >Dob range 2</option>
<option value="3" >Dob range 3</option>
<option value="4" >Dob range 4</option>
</select>

<button onclick="message()">Go</button>

<div id="PassTxt"></div>

<script type="text/javascript">
function message(){
var s = document.getElementById('DobRange');
var DobRange = s.options[s.selectedIndex].value;

if (DobRange == "1"){
document.getElementById("PassTxt").innerHTML = "Answer 1";
}
else if (DobRange == "2"){
document.getElementById("PassTxt").innerHTML = "Answer 2";
}
else if (DobRange == "3"){
document.getElementById("PassTxt").innerHTML = "Answer 3";
}
else if (DobRange == "4"){
document.getElementById("PassTxt").innerHTML = "Answer 4";
}
}
</script>

3 Answers 3

1

Simple, just use the DobRange variable in your text:

if(DobRange !== ""){
    document.getElementById("PassTxt").innerHTML = "Answer " + DobRange;
}

You won't need that entire if / else structure.

Sign up to request clarification or add additional context in comments.

Comments

0

I would do:

<body>
<select id="DobRange">
<option value="" >Please select a date range</option>
<option value="1" >Dob range 1</option>
<option value="2" >Dob range 2</option>
<option value="3" >Dob range 3</option>
<option value="4" >Dob range 4</option>
</select>

<button onclick="message()">Go</button>

<div id="PassTxt"></div>

<script type="text/javascript">
function message(){
  var s = document.getElementById('DobRange');
  var DobRange = s.options[s.selectedIndex].value;

  if (DobRange !== ""){
    document.getElementById("PassTxt").innerHTML = "Answer " + DobRange;
  }
}
</script>

Comments

0

If what you need is always "Answer " + DobRange then I'ld go with Cerbrus' answer. But if you want to eliminate else if statements generally for this kind of use cases, you can use switch case:

var answer = '';
switch (Dobrange){
    case 1:
    answer = "Answer 1";
    break;
    case 2:
    answer = "Answer 2";
    break;
    case 3:
    answer = "Answer 3";
    break;
    case 4:
    answer = "Answer 4";
    break;
    default:
    answer = "No answer";
}
document.getElementById("PassTxt").innerHTML = answer;

But personally I find a state-like pattern more useful:

var answers={
   ans_1: "Answer 1",
   ans_2: "Answer 2",
   ans_3: "Answer 3",
   ans_4: "Answer 4",
   ans_: "No answer"
};
var pointer = "ans_" + DobRange;
document.getElementById("PassTxt").innerHTML = answers[pointer];

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.