【问题标题】:why isn't simple javascript string compare working?为什么简单的javascript字符串比较不起作用?
【发布时间】:2019-06-26 22:53:01
【问题描述】:

我正在尝试做一个简单的 javascript 字符串比较,但似乎没有任何效果。我的 .ajax 读取数据库表并返回字符串。然后,我通过使用 jQuery 遍历我的 UI 复选框,将每个字符串与 .text() 值进行比较。当两个字符串匹配时,我想使用 jQuery 来检查具有匹配字符串的复选框。 typeof "string" 处的两种类型的变量。

我在代码中尝试过的事情,要么不显示匹配的字符串相等,要么有时它显示每个字符串都是相等的,即使它们看起来不相等。我尝试过的这些东西,有些在控制台中,通常呈现“未定义”。我已经搜索和研究并尝试了一些无济于事的事情。难住了。我试过了:

==, ===, 乘 *1, 使用 toLowerCase(), toUpperCase(), trim(), valueOf(), eval, toString()。

jQuery.each(data, function(index) {          
    var question_id = data[index].question_id;
    var question_text = data[index].question_text;

    for (i = 1; i <= 25 ; i++) { //checkbox element uses i as part of its id.
        checkbox_text = jQuery('#ocCheckBox' + i).text(); //checkbox text
        if (question_text == checkbox_text) {
            //jQuery('#ocCheckBox' + i).jqxCheckBox('checked', true);
            console.log(
                "id/text: " + i + "/" + question_id + "/" + question_text + " =? #ocCheckBox" + i + ": " + jQuery('#ocCheckBox' + i).text()
            );
        }
    }
}

我希望比较 2 个字符串,当它们匹配时,然后使用 jQuery 选中该框。相反,字符串要么一直呈现为不相等,要么一直呈现为相等。

事后编辑:我无法使代码可复制,因为它从远程服务器获取数据 - 它很简单:

if(question_text == checkbox_text).

我的 .ajax 调用一个 .php 文件执行 Select ,它返回一个 json_encode 数组。

jQuery.each(data, function(index) 

像这样在“数据”中循环抓取文本:

var question_text = data[index].question_text;

console.log 显示这是一个 typeof = string。 console.log 显示的文本是:“提高了获得高质量护理的机会。”

接下来,我循环检查所有复选框 [将我的帖子从 $EOCQ_OCcount var 更正为 25 - 复选框数]。

我像这样抓取每个 UI 复选框的 text(),如我的代码所示:

checkbox_text = jQuery('#ocCheckBox' + i).text();

console.log 将 checkbox_text 显示为 typeof 字符串。 console.log 显示 checkbox_text 文本:“提高了获得高质量护理的机会。”。

所以,现在它显示 question_text 和 checkbox_text 都是“字符串”,并且都包含“改进了对高质量护理的访问”。

然后我使用以下方法将数据库中的 question_text 与 checkbox_text 进行比较:

if(question_text == checkbox_text) { ... THIS is where it does not compare the strings properly.

希望这会有所帮助,再次感谢您对此的关注,仍然很难过。

【问题讨论】:

  • 请在可运行的堆栈片段中发布minimal reproducible example - 我们无法看到您的data 是什么,或者您的$EOCQ_OCcount 从这里回显了什么
  • 仅供参考,您被禁止提问是有原因的。你应该从中吸取教训。请阅读How to Ask——你没有提供任何重现你的问题的能力。
  • 您可以尝试记录question_textcheckbox_test 的值以在比较之前查看它们的值吗?通过这种方式,您至少可以自己确认实际比较的是哪些值,并且可能会提示您从哪里开始。
  • jQuery('#ocCheckBox' + i).text() ???复选框是否甚至返回 text() 的值?您可能必须使用 val() 或 attr("value")。
  • 你确定字符串是一样的吗?请注意,"hello"" hello""hello " 都是不同的。空格很重要,这包括 HTML 中的换行符和制表符

标签: javascript string-comparison


【解决方案1】:

如果你只是想检查两个字符串是否相等,那么你的字符串比较:

if(question_text == checkbox_text) ...

应该没问题。

我需要查看更多您的代码以提供更多帮助,尤其是因为我对 jQuery 不太熟悉。但我要做的是检查以确保两个变量都是字符串。

我也觉得你应该能够在不使用 jQuery 的情况下做到这一点。我会这样做:

<input type = "checkbox" id = "item1"><p>item1</p>
<input type = "checkbox" id = "item2"><p>item2</p>

然后有:

var items = [
"item1",
"item2"
];

var valid = false;
var x;

while (!valid) { // This loop just forces valid input.
   x = input() // Or however you want to handle user input.
   if (items.includes(x)) {
      valid = true;
   }
}

for (item of items) {
   if (x == item) {
      document.getElementById(item).checked = true;
   }
}

这很烦人,因为它强制您将所有 ID 放入一个数组中,但它很简单,而且很有效。

【讨论】:

  • 类似的事情发生在我身上,我喜欢你的想法。调查它。
  • 无法在此处格式化,但我尝试了您的建议,但仍然无法进行比较。这是我的新代码,充满了注释掉的代码,以及说明我尝试过的其他事情的文档。希望这行得通,我的第一个 jsfiddle - jsfiddle.net/dcparham/wn791hze/6
【解决方案2】:

全部 - 答案涉及你们所说的一些内容,但总而言之,诀窍是:

使用 typeof 来确定每个实际上是一个字符串。 使用 .length() 来确定每个字符串不完全相同的原因。n 使用 .trim() 使它们的长度相同 - >>>这解决了我的问题

我还使用了带有 2 个字符串的 localeCompare(),以防简单 == 不可靠 我还使用 valueOf() 来返回 String 对象的原始值。

感谢大家对这个令人抓狂的问题的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多