我有一个非常简单的jquery需要检查ajax调用返回的布尔值,并设置一个复选框来检查它是否为真。
console.log("loc: " + r.location.defaultLocation);
if( r.location.defaultLocation == true ) {
$('#loc-default').attr('checked',true);
}
这在打开模式窗体的onclick函数中运行 - 如果返回的位置信息指示这是默认位置,则应选中复选框。我们在一个页面上有5个 - 即用户可以点击的5个位置。
我遇到的是即使r.location.defaultLocation
返回false(根据console.log行),仍然会检查复选框。我做错了什么?
对于那些坚持认为true / false必须是字符串而不是布尔值的人:
这是console.info(typeof(r.location.defaultLocation));
这是console.dir(r)
的结果,如果有帮助的话。 (group
模糊,因为它是敏感信息。)
发现问题
显然jquery记住在第一个被标记为选中后#loc-default
被检查。我在函数中添加了一个else,现在它可以工作:
if( r.location.defaultLocation == true ) {
$('#loc-default').attr('checked',true);
}
else {
$('#loc-default').attr('checked', false);
}
答案 0 :(得分:3)
我能看到发生这种情况的唯一方法是,如果defaultLocation实际上不是布尔值false,而是字符串“false”,其值为true。
答案 1 :(得分:2)
确保r.location.defaultLocation
是布尔值。
尝试if (!!r.location.defaultLocation) {}
强制该值为boolean类型。
答案 2 :(得分:2)
我认为r.location.defaultLocation
是字符串 "false"
。因此,如果您使用console.log
,则会看到"false"
。但是"false" == true
是真的。
您可以使用typeof
检查变量的类型。
console.log(typeof r.location.defaultLocation); // Log the current type of r.location.defaultLocation
console.log(typeof false); // Display boolean
console.log(typeof "false"); // Display string
答案 3 :(得分:1)
由于您的代码看起来是正确的,我会尝试处理else语句并强制不选中复选框。
if( r.location.defaultLocation == true ) {
$('#loc-default').attr('checked',true);
} else {
$('#loc-default').attr('checked',false);
}
答案 4 :(得分:0)
首先,我会检查r.location.defaultLocation
是什么
console.info(typeof(r.location.defaultLocation));
然后我会从那里开始,但使用上面的代码:
if (!!r.location.defaultLocation && typeof(r.location.defaultLocation)==="string") {}