Javascript 相等怪异

发布于 2024-11-17 16:42:18 字数 534 浏览 1 评论 0原文

我正在尝试通过ajax 获取一些数据。其中一项数据确定默认情况下是否应选中复选框。如果返回的变量isVisible1,那么应该检查它,如果它的0那么应该取消检查。代码如下:

$.getJSON(myUrl, function(result)
    {
        isVisible = result.isVisible;
        // snip...
    } );

稍后的代码:

var isChecked = (isVisible) ? true : false;
$("#visible").attr('checked', isChecked);

问题是,无论 isVisible 是否设置为 1 或 0,checked 变量始终被评估为 true。我真的不确定问题是什么。也许 isVisible 被视为字符串?我该如何解决这个问题?

I'm trying to fetch some data through ajax. One of the data determines whether or not a checkbox should be checked by default. If the returned variable isVisible is 1, then it should be checked, if its 0 then it should be unchecked. Here's the code:

$.getJSON(myUrl, function(result)
    {
        isVisible = result.isVisible;
        // snip...
    } );

Later on in the code:

var isChecked = (isVisible) ? true : false;
$("#visible").attr('checked', isChecked);

The problem is that, whether or not isVisible is set to 1 or 0, the checked variable is always being evaluated to true. I'm really not sure what the problem is. Perhaps isVisible is being treated as a string ?? How do I resolve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

呆橘 2024-11-24 16:42:18

可能 isVisible 是一个字符串。 “0” 是 Javascript 中的真值。使用这个代替:

var checked = (isVisible==="1") ? true : false;

Probably isVisible is a string. "0" is a truthy value in Javascript. Use this instead:

var checked = (isVisible==="1") ? true : false;
揪着可爱 2024-11-24 16:42:18

怎么样

isVisible = (result.isVisible == "1")

How about

isVisible = (result.isVisible == "1")

?

烟酒忠诚 2024-11-24 16:42:18

我猜“isVisible”是一个字符串而不是数字,所以它通过了测试。
尝试 parseint(isVisible, 10),让我知道

I guess "isVisible" is a string not a number, so it pass the test.
Try parseint(isVisible, 10), an let me know

生活了然无味 2024-11-24 16:42:18

Ajax 是异步的。你需要使用回调。

$.getJSON(myUrl, function(result)
{
    isVisible = result.isVisible;
    // snip...
    callback_setvis();
} );

function callback_setvis(){
     var ischecked = (isVisible) ? true : false;
     $("#visible").attr('checked', ischecked);
}

再次查看您的问题后,似乎上述内容可能不起作用。

这可能是 attrprop 的问题,您应该这样做:

如果您使用 jQuery 1.6 或更高版本,

  $("#visible").prop('checked', ischecked);

Ajax is asynchronous. you need to use callbacks.

$.getJSON(myUrl, function(result)
{
    isVisible = result.isVisible;
    // snip...
    callback_setvis();
} );

function callback_setvis(){
     var ischecked = (isVisible) ? true : false;
     $("#visible").attr('checked', ischecked);
}

After reviewing your question again it seems the above might not work.

This might be an issue of attr vs prop

if you are in jQuery 1.6 or greater you should do:

  $("#visible").prop('checked', ischecked);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文