Javascript if statements not working [duplicate]

Pretty straight-forward what I want to do:

  • If the input is 0, it means that they didn't input a number and it should tell you so.
  • When the input is 7, it should say that you got it right.
  • Anything else, it should tell you that you got it wrong.

But it just outputs the "7 is correct" line no matter what the input is, and I can't figure it out what is wrong.

<script type="text/javascript">
function problem2 ()
{
var number = 0;
var text=document.getElementById("output");
number = prompt("Enter a number between 1 and 10 please" , 0);
if (number = 0)
    {
     text.value = "You didn't enter a number!";
    }
if (number = 7)
    {
     text.value = "7 is correct!";
    }
else
    {
     text.value = "Sorry, ", input, "is not correct!";
    }
}
</script>
<input type="button" value="Click here" onclick="problem2()">
<input id="output" type="text">

Solution 1:

You're assigning with =. Use == or ===.

if( 0 == number ){

  text.value = "You didn't enter a number!";
}

Also, be wary of your brace placement. Javascript likes to automatically add semicolons to the end of lines. Source.

Solution 2:

You are using assignment operators as your conditionals instead of comparison operators:

if (number = 0) // falsy. Same as if (false)
    {
     text.value = "You didn't enter a number!";
    }
if (number = 7) // truthy. Same as if (true)
    {
     text.value = "7 is correct!";
    }
else
    {
     text.value = "Sorry, ", input, "is not correct!";
    }

Alternatively you can use a switch and organize the conditionals a bit easier:

switch (number) {
    case 0: 
        text.value = "You didn't enter a number!";
        break;

    case 7:
        text.value = "7 is correct!";
        break;

    default:
        text.value = "Sorry, ", input, "is not correct!";
        break;
}

Solution 3:

Here is a code with the some fixes and improvements (I commented what I changed):

function problem2 (){
    //I multiplied by * 1 to work with numbers, also used || to default to 0 in case of NaN
    var num = (prompt("Enter a number between 1 and 10 please" , 0) * 1) || 0;
    var msg = "";

    if (!num){ //I prefer this over 'num == 0'
         msg = "You didn't enter a number!";
    //you should use 'else if' in this case
    }else if (num == 7){//'=' is for assignment, use '==' or '===' instead
         msg = "7 is correct!";
    }else{
        //you had an undefined var 'input', you probably meant 'num'
        //you also were connecting var and strings using commas, use '+' instead
         msg = "Sorry, " + num + " is not correct!"; //added a space in ' is'
    }

    //no need to store the element in a var anymore :D
    document.getElementById("output").value = msg;
}

Aditionally, two more changes can be made:

  • only one var (e.g var something = "", somethingElse = 99;)
  • assign the default text from the beginning, like var msg = "default" and remove the else

Note: an undocumented change I made was to rename some vars, I encourage everyone to stop using vars like number, text, string, if you have this bad habit, you will eventually use illegal var names by mistake.