I am creating a website and would like to make a tool using JavaScript to choose someone’s skateboard size depending on their shoe size. This is the code I am using:
const shoeSize = document.getElementById('shoeSize').value
let boardSize = ''
switch (shoeSize) {
case 0 <= 7:
boardSize = '7.75'
break;
case 8,9:
boardSize = '8'
break;
case 10,11:
boardSize = '8.25'
break;
case 12,13:
boardSize = '8.38'
break;
case 14 >= 20:
boardSize = '8.5'
break;
default:
boardSize = '?'
document.write(boardSize)
}<p>
Most people pick their board size by prefrence but I will make a tool below to choose a board size that will fit your shoe size best. The most popular board sizes are 7.75, 8, 8.25, 8.38, and 8.5. <br> <br>
If your shoe size is: <input id='shoeSize' type="text" class="shoe">. The best board size for you would be:
</p>No matter what I type into the text box there is always a “?” that shows up on my website. What can I do/ change to fix this. What I want to happen is if someone types for example “10” into the text box, “8.25” should be printed. I would also appreciate any other tips to improve my code.
Advertisement
Answer
Try this:
const shoeSizeInput = document.getElementById('shoeSize')
const shoeSizeResult = document.getElementById('resultSize') // Get reference for the element where you want to display result
// Add event listener which will fire when input is changing
shoeSizeInput.addEventListener('input', (event) => {
const shoeSize = parseInt(event.target.value) // Get input value and parse to number
let boardSize = '?'
switch (true) {
case 0 <= shoeSize && shoeSize <= 7:
boardSize = '7.75'
break;
case shoeSize === 8 || shoeSize === 9:
boardSize = '8'
break;
case shoeSize === 10 || shoeSize === 11:
boardSize = '8.25'
break;
case shoeSize === 12 || shoeSize === 13:
boardSize = '8.38'
break;
case 14 <= shoeSize && shoeSize <= 20:
boardSize = '8.5'
break;
}
shoeSizeResult.textContent = boardSize // Set text of result element to board Size
})<p>Most people pick their board size by prefrence but I will make a tool below to choose a board size that will fit your shoe size best. The most popular board sizes are 7.75, 8, 8.25, 8.38, and 8.5.</p> <label>If your shoe size is:</label><input id='shoeSize' type="number" class="shoe"> <p id="resultSize"></p>
- Added an event listener. You checked the input value instantly when the page is loading. Therefore it always was empty.
- Changed the switch statement. You can read more about that here: Switch on ranges of integers in JavaScript
- Added a
ptag to display result. This is better thanwriteDocument().