10

I have a boolean value set as a hidden variable in the form and I have the below javascript .

         $().ready(function() {

             var flag =  $('#popUpFlag').val();

             alert("flag = "+flag);

             if(flag){
                alert("flag is true");
             }else{
                alert("flag is false");
             }
        })

These are the outputs for the alert .

         flag =
         flag is false


         flag = false
         flag is false


         flag = true
         flag is false

My concern is obviously the third output . When the flag is true , why is it printing "flag is false" , instead of "flag is true" . I tested it in IE8 and FF 4

Suggestions are welcome.

Vinoth Kumar C M
  • 10,378
  • 28
  • 89
  • 130
  • 2
    Is this your only code? It should definitely not print `flag is false`. Are you doing anything else in between? – Felix Kling Apr 27 '11 at 07:19
  • What this contain, string boolean?? $('#popUpFlag').val(); – cpoDesign Apr 27 '11 at 07:19
  • As @alex and @Shadow pointed out, `$('#popUpFlag').val()` will return a string, and not a boolean value. Now, every *non-empty* string evaluates to `true`, also `"false"`, but this does not explain your second case then. So you must be doing something else... – Felix Kling Apr 27 '11 at 07:26
  • @Felix You are right. Something else is going on. – alex Apr 27 '11 at 07:30

3 Answers3

16

No, you don't have a boolean value in the hidden field. The value in the field is always a string.

When you use the string value as if it was a boolean value, you get unexpected results. A condition is false if the value is false, 0, "" or null, but the string "false" is neither, so it's evaluated as true.

If you want a boolean value, you have to parse the string. An easy way is to simply check if the string has a specific value:

var flag =  $('#popUpFlag').val() === 'true';
Guffa
  • 687,336
  • 108
  • 737
  • 1,005
6

flag is a string, so have this instead:

if (flag === "true") {
  //true
}
else if (flag === "false") {
  //false
}
Shadow The GPT Wizard
  • 66,030
  • 26
  • 140
  • 208
0

Hmm... I suspect that the value you are using is a string, so you're seeing the value correctly in the alert, but not when it tries to look at it like a boolean.

How can I convert a string to boolean in JavaScript?

Just try ocnverting to boolean and see if it still gives you the same issue

Community
  • 1
  • 1
Cyril Gupta
  • 13,505
  • 11
  • 64
  • 87