I have made a function that is suppose too randomize a number after being givin two numbers to work with: min and max. I call this function: random(min,max). I also have a button to call this function, but first detects to see if two inputs are not undefined, NaN, or “”. My program seemed to work at first but the very moment I used 5 and 10, 5 being my min and 10 being my max, it started to just use the default numbers I set for it, 0 and 100.
javascript
window.onload = function()
{
function random(min,max)
{
return Math.floor(Math.random() * (max - min) + min);
}
document.getElementById("roll").addEventListener("click",function()
{
console.log(document.getElementById("min").value);
let min = 0;
let max = 100;
if(!isNaN(document.getElementById("min").value) && document.getElementById("min").value != "" && document.getElementById("min").value != undefined)
{
Number(min = document.getElementById("min").value);
}
if(!isNaN(document.getElementById("max").value) && document.getElementById("max").value != "" && document.getElementById("max").value != undefined)
{
Number(max = document.getElementById("max").value + 1);
}
document.getElementById("output").innerHTML = `Your roll is...${random(min,max)}!`;
});
}
html
<center>
<form>
<label>min number</label><br>
<input type='number' placeholder=0 id='min'>
</form>
<form>
<label>max number</label><br>
<input type='number' placeholder=100 id='max'>
</form>
<button id='roll'>
roll dice
</button>
<p id='output'>
your roll is...
</p>
</center>
The issue is basically that it is rolling like it should at first, without inputting a new min or max, but then when you input a new min it does not follow the rules of that min like it should. I tested with just the max, and it works fine for that for some reason.
Advertisement
Answer
First, you don’t need to chain all those operations:
!isNaN(document.getElementById("min").value) && document.getElementById("min").value != "" && document.getElementById("min").value != undefined
In fact, it’s sufficient to check for two of those:
if(!isNaN(document.getElementById("min").value) && document.getElementById("min").value!="")
The value returned by the <input> element is always a string and the isNaN function tries to convert anything that’s passed in as a parameter to a Number, well except for an empty string.
The next mistake is this:
Number(min = document.getElementById("min").value);
Actually this doesn’t do anything. I think you wanted to assign the variable min the value of the <input> textfield, but it can’t be done that way. It’s needs to look like this:
min = parseInt(document.getElementById("min").value);
So if we put everything together:
function random(min, max) {
return Math.floor(Math.random() * (max - min) + min);
}
document.getElementById("roll").addEventListener("click", function() {
let min = 0;
let max = 100;
if (!isNaN(document.getElementById("min").value) && document.getElementById("min").value != "") {
min = parseInt(document.getElementById("min").value);
}
if (!isNaN(document.getElementById("max").value) && document.getElementById("max").value != "") {
max = parseInt(document.getElementById("max").value) + 1;
}
document.getElementById("output").innerHTML = `Your roll is...${random(min,max)}!`;
});<form>
<label>min number</label><br>
<input type='number' placeholder=0 id='min'>
</form>
<form>
<label>max number</label><br>
<input type='number' placeholder=100 id='max'>
</form>
<button id='roll'>
roll dice
</button>
<p id='output'>
your roll is...
</p>