5

为了更好地学习,我开始使用 jQuery mobile 创建一个待办事项列表。我正在听来自这样一个菜单按钮的事件:

        me.selectedTarget = me.menuNode.find(".ui-btn").first();

        me.menuNode.on("click", ".ui-btn", function (e) {
            var target =  $(e.currentTarget)
                ,targetText = target.text();
            console.debug("Click on'", targetText,"'" );
            if(target === me.selectedTarget) return;

            if(targetText == "View To Do "){
                core.pub("view:todo");
            } else if(targetText == "View Done ") {
                core.pub("view:done");
            } else {
                me.selectedTarget.click();
            }
            me.selectedTarget = target;
        });

由于某种原因,变量 targetText 在末尾有一个额外的 " " 空格。我有 3 个按钮,但第三个按钮有点特别——反正不相关。

此代码侦听的按钮。

我的问题是我总是使用最后一个 else 子句。targetText 永远不会等于“View To Do”或“View Done”。

为什么不是“查看完成”==“查看完成”?~X(

firebug 调试结果

html 标记

4

1 回答 1

21

比较失败,因为字符串不相同。所以问题真的是为什么它们不一样?显然,其中一个字符串中的空格不是标准空格字符(Unicode 有多个空格),或者其中一个字符串中有一个不可见的字符(Unicode 也有这些)。

所以要找出发生了什么,我会这样做:

var index;
for (index = 0; index < targetText.length; ++index) {
    console.log("char " + index + ": " + targetText.charCodeAt(index));
}

...并且与代码中的字符串文字相同(不是重新键入它,而是将其移动到本地然后输出;因为如果重新键入它,您可能会键入普通空格)。比较字符代码的序列,您会发现差异。

于 2012-04-14T15:54:34.460 回答