When I get a value or set a value (from the server side, for example) for an input that is a boolean type it comes as "True" or "False" instead of true or false.
For example:
//"True"
var isDated = $('.someClass').val();
//will not pass because isDated is a string
if (isDated == true){
console.log("passed");
}
Why does this happend? Which is the best way to avoid this?
EDIT:
I've found a blog that has a solution to avoid this problem: http://www.peterbe.com/plog/data-and-attr-in-jquery
Below a prototype method called .toBoolean() to validate true/false when it comes as a string based on some responses from this post:
String.prototype.toBoolean = function ()
{
var dictionary = { "True": true, "False": false };
return dictionary[this];
};
Boolean.prototype.toBoolean = function () {
return this;
};
Number.prototype.toBoolean = function ()
{
if (this) {
return true;
}
return false;
};
If you want to know why C# outputs True
and False
instead of the lowercase versions, see this question.
If you want to know why it's not converted to a boolean value, it's because all <input>
elements' values are considered text by JavaScript. It's up to you to convert it into another type. With checkboxes/radio buttons that's already done by using the .checked
attribute (for jQuery, either $('.someClass').is(':checked')
or $('.someClass').prop('checked')
will work). Otherwise, the best way would be comparing the value to a string, and using that, for example: if ($('.someClass').val().toLowerCase() === 'true')
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With