почему не работает сравнение простых строк JavaScript? - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь сделать простое сравнение строк JavaScript, но, похоже, ничего не работает. Мой .ajax читает таблицу БД и возвращает строки. Затем я сравниваю каждую строку со значением .text (), просматривая свои флажки в пользовательском интерфейсе с помощью jQuery. Когда две строки совпадают, я хочу использовать jQuery, чтобы установить флажок с соответствующей строкой. Оба типа переменных в typeof "string".

Вещи, которые я пробовал в коде, либо не показывают совпадающие строки как равные, либо иногда это показывает, что все строки равны, даже если они не кажутся равными. Эти вещи, которые я пробовал, некоторые в консоли, обычно отображают "Undefined". Я искал и исследовал и пробовал вещи безрезультатно. Тупик. Я пробовал:

==, ===, умножение * 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. Вместо этого либо строки отображаются как неравные все время, либо все время равны.

Отредактировано ex post facto: я не могу сделать код воспроизводимым, потому что он получает данные с удаленного сервера - это так просто, как:

if(question_text == checkbox_text).

my .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 - количество флажков].

Я беру текст () каждого флажка пользовательского интерфейса, как показано в моем коде:

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

console.log показывает, что checkbox_text является строкой typeof. console.log показывает текст checkbox_text: «Улучшен доступ к высококачественной медицинской помощи».

Итак, теперь он показывает, что question_text и checkbox_text оба являются «string» и оба содержат «Улучшенный доступ к высококачественной помощи».

Затем я сравниваю question_text из БД с checkbox_text, используя это:

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

Надеюсь, это поможет, и еще раз спасибо за ваше внимание к этому, все еще в тупике.

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Если вы просто пытаетесь проверить, равны ли две строки, то сравнение строк:

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;
   }
}

Это раздражает, потому что заставляет вас помещать все идентификаторы в массив, но это просто и работает.

0 голосов
/ 28 июня 2019

ВСЕ - ответ включал кое-что из того, что вы все сказали, но вкратце вот фокус:

Используется typeof для определения того, что каждый из них на самом деле является строкой. Использовал .length (), чтобы определить, почему каждая строка не была одинаковой. Использовал .trim () чтобы сделать их одинаковой длины - >>> это решило мою проблему <<<. </p>

Я также использовал localeCompare () с двумя строками на случай, если простой == не был надежным Я также использовал valueOf () для возврата примитивного значения объекта String.

Спасибо всем за помощь в решении этой безумной проблемы!

...