即使价值不真实,“真正的”评估仍在运行
我有一个非常简单的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行),复选框仍然被检查。 我究竟做错了什么?
对于那些坚持认为真/假必须是字符串而非布尔值的人:
这是console.info(typeof(r.location.defaultLocation));
这是console.dir(r)
的结果,如果有帮助的话。 ( group
因为敏感信息而模糊不清。)
发现问题
显然,jquery记住#loc-default
在第一个标记为checked后被选中。 我添加了一个其他的功能,现在它的工作原理:
if( r.location.defaultLocation == true ) {
$('#loc-default').attr('checked',true);
}
else {
$('#loc-default').attr('checked', false);
}
由于你的代码看起来是正确的,我会尝试处理else语句并强制复选框不被检查。
if( r.location.defaultLocation == true ) {
$('#loc-default').attr('checked',true);
} else {
$('#loc-default').attr('checked',false);
}
我可以看到发生这种情况的唯一方法是,如果defaultLocation实际上不是布尔值false,而是字符串“false”,其值为true。
确保r.location.defaultLocation
是一个布尔值。
试试if (!!r.location.defaultLocation) {}
强制该值为boolean类型。
上一篇: "true" evaluation running even when value is false
下一篇: How we can use Use Javascript and asp validation control together