5

jQuery モバイルを使って todo リストを作成し、学習を深めました。次のようなメニューのボタンからのイベントを聞いています。

        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 の末尾に 1 つの余分な " " スペースがあります。私は 3 つのボタンを持っていますが、3 番目のボタンは少し特殊で、関係ありません。

このコードがリッスンするボタン。

私の問題は、私が常に最後のelse句を取得していることです。targetText が「View To Do」または「View Done」と等しくなることはありません。

"View Done" == "View Done" ではないのはなぜですか? ~X(

firebug のデバッグ結果

html マークアップ

4

1 に答える 1

21

文字列が同じでないため、比較は失敗しています。問題は、なぜそれらが同じではないのかということです。文字列の 1 つのスペースが標準のスペース文字ではないか (Unicode には複数のスペースがあります)、または文字列の 1 つに非表示の文字が含まれているようです (Unicode にもスペースがあります)。

何が起こっているのかを知るために、私はこれを行います:

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

...そして、コード内の文字列リテラルと同じです(再入力するのではなく、ローカルに移動してから出力します。再入力すると、おそらく通常のスペースを入力するためです)。文字コードのシーケンスを比較すると、矛盾が見つかります。

于 2012-04-14T15:54:34.460 に答える