为什么简单的javascript字符串比较不起作用?

时间:2019-06-26 22:53:01

标签: javascript string-comparison

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

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

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

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通过执行Select调用一个.php文件,该文件返回一个json_encode数组。

jQuery.each(data, function(index) 

遍历“数据”,获取像这样的文本:

var question_text = data[index].question_text;

console.log显示为typeof =字符串。 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都是“字符串”,并且都包含“改善了对高质量护理的访问。”

然后我使用以下方法将数据库中的问题文本与复选框文本进行比较:

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

希望这会有所帮助,再次感谢您对此仍然感到困惑的关注。

2 个答案:

答案 0 :(得分: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放入一个数组中,但是它很简单并且有效。

答案 1 :(得分:0)

全部-答案涉及到大家所说的一些内容,但总之,这就是窍门:

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

在简单的==不可靠的情况下,我还对2个字符串使用了localeCompare() 我还使用了valueOf()返回String对象的原始值。

谢谢您,所有人都为这个令人发指的问题提供帮助!