J'ai un programme mathématique qui génère au hasard 2 nombres et les affiche à 2 endroits (par exemple num1 et num2) J'ai créé l'instruction if qui montrera correcte ou incorrecte en fonction de l'entrée de l'utilisateur. Je crois que l'erreur se trouve dans la déclaration if else

function check() {
var txt = document.getElementById("textarea").value;
var n1 = document.getElementById("num1").innerHTML;
var n2 = document.getElementById("num2").innerHTML;
if(txt=n1+n2){hideshow(document.getElementById('correct'));}
else{hideshow(document.getElementById('incorrect'));}
}

Pour les curieux, voici tout mon code:

function num1() {
    var x = Math.floor((Math.random() * 10) + 1);
    document.getElementById("num1").innerHTML = x;
}
function num2() {
    var x = Math.floor((Math.random() * 10) + 1);
    document.getElementById("num2").innerHTML = x;
}
function check() {
var txt = document.getElementById("textarea").value;
var n1 = document.getElementById("num1").innerHTML;
var n2 = document.getElementById("num2").innerHTML;
if(txt=n1+n2){hideshow(document.getElementById('correct'));}
else{hideshow(document.getElementById('incorrect'));}
}
function hideshow(which){
if (!document.getElementById)
return
if (which.style.display=="block")
which.style.display="none"
else
which.style.display="block"
}
 p {
    display: inline;
    vertical-align: top;   
}
<link rel="stylesheet" media="all" href="http://hokuco.com/style.css">
<body onload ="num1();num2();hideshow(document.getElementById('correct'));hideshow(document.getElementById('incorrect'));">
<div id ="headline">
<pre><p id="num1" name ="qty"></p> + <p id="num2"name ="qty"></p></pre>
<textarea id ="textarea"></textarea></br>
<button onclick="check();">check</button>
<button onclick="num1();num2();hide(document.getElementById('correct'));hide(document.getElementById('incorrect'));">new</button>
<div id="correct" style="font:24px bold; display: block">Good job!</div>
<div id="incorrect" style="font:24px bold; display: block">Incorrect</div>
</div>
-1
Jake t 7 mars 2016 à 21:56

3 réponses

Meilleure réponse

Le innerHtml récupérerait une chaîne et non un nombre, vous devrez l'analyser.

De plus, le if(txt=n1+n2) ne vérifiera pas si le premier nombre est égal au second, il ajoutera le premier nombre au second, et le résultat sera toujours vrai unissime si le résultat de l'addition était faux ou nul ou non défini . Pour vérifier si le premier est égal au second, vous devrez utiliser ==.

function check() {
    var txt = document.getElementById("textarea").value;
    var n1 = document.getElementById("num1").innerHTML;
    var n2 = document.getElementById("num2").innerHTML;
    n1=parseInt(n1);
    n2=parseInt(n2);
    if(txt==n1+n2){hideshow(document.getElementById('correct'));}
    else{hideshow(document.getElementById('incorrect'));}
}
0
Yazan W Yusuf 7 mars 2016 à 19:05

Deux choses:

  1. Le value d'un input et le innerHTML d'un élément sont toujours des chaînes

  2. = est pour l'affectation, pas la comparaison

Alors votre

if (txt=n1+n2)

Volonté

  1. Attribuez le résultat du virement de la chaîne n2 à la fin de la chaîne n1 à txt

  2. Allez dans le corps du if si la chaîne résultante n'est pas complètement vide

Pour faire un ajout , vous devez convertir en nombre. J'entre dans certains détails sur la façon de le faire dans cette réponse. Pour faire une comparaison , utilisez == ou ===. Peu importe que vous utilisiez si les opérandes sont du même type. S'ils ne le sont pas, == essaiera de les contraindre à des fins de comparaison (parfois de manière surprenante), === ne le fera pas (cela dira qu'ils ne sont pas égaux s'ils sont de différents types).

0
2 revs 23 mai 2017 à 11:59
function check() {
var txt = parseFloat(document.getElementById("textarea").value);
var n1 = parseInt(document.getElementById("num1").innerHTML);
var n2 = parseInt(document.getElementById("num2").innerHTML);
alert(txt==n1+n2);
if(txt==n1+n2){hideshow(document.getElementById('correct'));}
else{hideshow(document.getElementById('incorrect'));}
}

Vous manquiez ==, pas =. Et txt, n1, n2 étaient des chaînes et non des nombres. il fallait donc les analyser

0
Aschab 7 mars 2016 à 19:06