JQuery: Как выбрать значение из раскрывающегося списка без учета регистра?

Мой сценарий:

  • У меня есть текстовое поле, в которое пользователь вводит текст
  • Текстовое поле имеет функцию onblur, которая пытается выбрать значение из выпадающего списка (если оно существует) на основе ввода текстового поля

Это отлично работает, если значение текстового поля - это тот же случай, что и значение выпадающего списка. Но я хочу, чтобы это было нечувствительным к регистру.

Итак, если пользователь набирает "stackoverflow", тогда я хочу, чтобы он выбирал из выпадающего списка "StackOverflow". Как это сделать с помощью jQuery?

Ответ 1

Здесь другой подход: найдите соответствующее значение в его фактическом случае "StackOverflow" и вызовите val() с этим.

  var matchingValue = $('#select option').filter(function () { 
      return this.value.toLowerCase() == 'stackoverflow'; 
  } ).attr('value');    
  $('#select').val(matchingValue);

Конечно, буквальный 'stackoverflow' должен быть заменен переменной.

Ответ 2

Я думаю, что лучший способ сделать это - посмотреть на него раньше, чем после. Если вы делаете их строчными, все они стандартизированы и с ними легче работать. Тогда все, что вам нужно сделать, это ввести пользователя в нижний регистр, и это действительно легко сопоставить.

Другой вариант - использовать функцию фильтра, такую ​​как найденная здесь:

$('something').filter(function() {
        return (new RegExp(value, "i")).test($(this).attr('attribute'));
    });

Значение и атрибут должны быть заменены.

Ответ 3

В размытии, повторите выбор и проверьте, соответствует ли он. Затем выберите ту, которая соответствует.

В коде:

$("#button").blur(function(){
  var val = $(this).val();
  $("#list option").each(function(){
     if($(this).text().toLowerCase() == val) $(this).attr("selected","selected");
  });
});

Я еще не тестировал его, поэтому обязательно проверяйте наличие синтаксических ошибок.

Ответ 4

Функция регулярного выражения (RegExp), вероятно, способ пойти.

var txt = new RegExp(pattern,attributes);

: шаблон текста
атрибуты: "i" для нечувствительности к регистру

Вы можете комбинировать функцию фильтра. что-то вроде этого должно работать.

$("#textbox").blur( function () { 

    var text = $(this).val();

    var dropdownlist = 
       $("select").filter( function () {
          return (new RegExp(text, "i")).test($(this).attr("id"));
       });

    // do something to dropdownlist

});