即使价值不真实,“真正的”评估仍在运行

我有一个非常简单的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类型。

链接地址: http://www.djcxy.com/p/74979.html

上一篇: "true" evaluation running even when value is false

下一篇: How we can use Use Javascript and asp validation control together