javascript - 奇怪的数据属性 bool 问题

标签 javascript jquery

我有一个标题的实时点击事件,它有一个箭头在打开和关闭它的内容时向上/向下翻转。

最奇怪的事情发生在 ! 后跟一个变量——它应该将它从 true -> false 翻转,反之亦然。基本上它根本不起作用,它会变为 false 并停留在那里...查看 fiddle 以了解我的意思。

为了简洁起见,我删除了很多代码。

Demo Code

$(document).on('click', '.regimenHeader', function () {
    var _state = $(this).attr('data-state');

    if (_state === 'true') {
        // do stuff
    }

    else { 
        // do stuff
    }

    // This is where the issue is happening, it isn't flipping the Boolean value
    // !"true" = false, !true = false, it works with strings or booleans
    $(this).attr('data-state', !_state);
});​

如果我执行以下操作,我可以让它完美地工作:

    if (_state === 'true') {
        // Manually flip the data-state boolean
        $(this).attr('data-state', false);
    }

我是否遗漏了什么为什么它没有按应有的方式工作??只是想知道为什么要这样做!

最佳答案

我认为你正在尝试这样做:

http://jsfiddle.net/JKUJb/2/

如果是这样,问题是您正在使用返回字符串的 .attr(),因此如果您转换:

!"true" //false

!"false" //false

.data() 另一方面返回已经“类型转换”的值

编辑:

为了更清楚,在 javascript 中唯一的虚假值是:

false;
null;
undefined;
'';
0;
NaN;

所以如果你真的想使用 .attr(),你可以,但我建议你首先这样做:

var _state = $(this).attr('data-state') === 'true'; //if 'true' then true, false otherwise

祝你好运!

关于javascript - 奇怪的数据属性 bool 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11853528/

相关文章:

javascript - 如何将站点摘要提供给 Google Bot?

javascript - 根据单选按钮选择切换子类别 div

javascript - 防止 jQuery 插件多次加载

javascript - jQuery 按键可正常工作,但按回车键除外

javascript - 动态激活或选择工作表

Javascript 条件 - 取消选中隐藏 div 中的单选按钮?

javascript - 在单击提交按钮之前,需要一个解决方案,通过 PHP 语言中的任何脚本或代码将 var 变量的值传递给 PHP 变量

javascript - JQuery(HtmlString) 返回多个元素

javascript - 我想在使用 jQuery 滚动到 View 时触发一次事件

现有类的 javascript 验证