JQuery: Как выбрать значение из раскрывающегося списка без учета регистра? - PullRequest
11 голосов
/ 06 августа 2009

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

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

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

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

Ответы [ 4 ]

14 голосов
/ 06 августа 2009

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

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

Конечно, литерал 'stackoverflow' следует заменить на переменную.

4 голосов
/ 06 августа 2009

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

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

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

Однако значение и атрибут необходимо заменить.

1 голос
/ 06 августа 2009

На размытие, итерации по вашим вариантам и проверьте, соответствует ли он. Затем выберите тот, который соответствует.

В коде:

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

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

0 голосов
/ 06 августа 2009

Функция регулярного выражения (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

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...