Существует два способа, которыми Вы могли приблизиться к этому лучше:
Передача словарь (ассоциативный массив), если Вы хотите оставить большую гибкость
, Берет объект в качестве аргумента и использует основанное на прототипе наследование для добавления гибкости.
Вот другой подход: найдите соответствующее значение в его фактическом случае, «StackOverflow», и вызовите с ним val ()
.
var matchingValue = $('#select option').filter(function () {
return this.value.toLowerCase() == 'stackoverflow';
} ).attr('value');
$('#select').val(matchingValue);
Конечно, литерал 'stackoverflow'
должен быть заменен переменной.
Я думаю, что лучший способ сделать это - это посмотреть на это до, а не после. Если вы сделаете их все в нижнем регистре, все они будут стандартизированы, и с ними будет легче работать. Затем все, что вам нужно сделать, это сделать ввод пользователя строчными буквами, и это действительно легко.
При размытии переберите свои параметры и проверьте, совпадают ли они. Затем выберите тот, который соответствует.
В коде:
$("#button").blur(function(){
var val = $(this).val();
$("#list option").each(function(){
if($(this).text().toLowerCase() == val) $(this).attr("selected","selected");
});
});
Я еще не тестировал его, поэтому обязательно проверьте синтаксические ошибки.
Регулярное выражение ( 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
});