J'essaie de créer un jeu de nombres aléatoires. L'un des éléments dont j'ai besoin est un générateur de nombres aléatoires qui permet à l'utilisateur de définir la plage dans laquelle le nombre sera choisi. Actuellement, je l'ai et cela ne fonctionne pas. Des conseils?

Javascript

var min = document.getElementById("minNum").value;
var max = document.getElementById("maxNum").value;

function setRandomNum() {
document.write(Math.floor(Math.random() * (max - min));
}

HTML

<input type="text" id="minNum" name="minNum" />
<input type="text" id="maxNum" name="maxNum">
<input type="button" id="submitRange" name="submitRange" value="Set Range" onclick="setRandomNum()">

Pour l'instant, le document.write est là juste pour tester si cela fonctionne.

2
daveC 5 mars 2016 à 01:56

3 réponses

Meilleure réponse

Vous obtenez les valeurs des entrées au chargement du document, c'est-à-dire pas lorsque vous appuyez sur le bouton et comme mentionné dans les commentaires, value est une chaîne, vous devez donc l'analyser comme ceci:

function setRandomNum() {

  var min = parseInt(document.getElementById("minNum").value);
  var max = parseInt(document.getElementById("maxNum").value);
  var randomNum = Math.floor(Math.random() * (max - min))
  document.write(randomNum);
}
<input type="text" id="minNum" name="minNum" />
<input type="text" id="maxNum" name="maxNum">
<input type="button" id="submitRange" name="submitRange" value="Set Range" onclick="setRandomNum()">
2
thatOneGuy 4 mars 2016 à 23:19

J'ai voté pour la solution thisOneGuy. Mais je recommande de mettre le getElementId en dehors de la fonction pour les performances:

var minElement = document.getElementById("minNum");
var maxElement = document.getElementById("maxNum");

function setRandomNum () {
  var max, min, random;

  max = parseInt(maxElement.value);
  min = parseInt(minElement.value);
  random = Math.floor(Math.random() * (max - min));

  document.write(random);
}
0
Aral Roca 4 mars 2016 à 23:28

Vos appels à document.getElementById sont en dehors de la fonction, ils ne sont donc pas exécutés à temps.

function setRandomNum() {
    var min = document.getElementById("minNum").value;
    var max = document.getElementById("maxNum").value;
    document.write(Math.floor(Math.random() * (max - min));
}
0
glcheetham 4 mars 2016 à 23:00