Во-первых, название было лучшим, которое я мог придумать.
Я написал очень короткий маленький скрипт для поиска в реальном времени.
Основы этого:
(function ($) {
$.fn.SearchThing = function (options) {
options = $.extend({
MaxCount: 5,
inputField: '#search_input',
sugestBox: '#search_sugest'
}, options);
var input = $(options.inputField);
var sugest = $(options.sugestBox);
sugest.hide();
input.keyup(function (e) {
switch (e.keyCode) {
//Other keys.
default:
queryServer(this.value);
}
});
function queryServer(value) {
var url = "/search/get?query=" + value; // value;
$.getJSON(url, function (result) {
if (result.Results < 1) {
sugest.hide();
return;
}
sugest.children().each(function (idx, itm) {
$(itm).remove();
});
sugest.show();
//Build box.
}
};
};
})(jQuery);
И это почти нормально работает. Есть 2 вещи, которые нужно желать, хотя. Тот, который на самом деле не так важен, а затем другой, который на самом деле является ошибкой, которая может быть решена другим, хотя, я не знаю. Но вот они:
BUG: результаты не всегда совпадают с данными в «поле ввода»
Это означает, что если я набираю «ASD», он выполняет поиск «ASD», поэтому, если я говорю «ASD», за которым следует быстрый «возврат», он должен искать «AS», однако время от времени похоже, что в итоге получаются результаты для "ASD".
Я знаю это, потому что в настоящее время я не реализовал серверную часть поиска, поэтому я возвращаю статический список, в котором первый элемент является поисковым термином.
Я полагаю, что это может быть потому, что поиск "AS" вернулся раньше, чем поиск "ASD", поэтому результаты применяются в порядке -> "A", "AS", "AS", "ASD" где они должны применяться в порядке «A», «AS», «ASD», «AS» ....
Также бывает, что если я наберу "ASD", он будет применять его по порядку -> "A", "ASD", "AS". (То же самое происходит, поиск "ASD" возвращается до поиска "AS")
Примечание: Короткие поисковые термины, такие как "ASD", редко вызывают эту ошибку, более длинные с более быстрым набором текста более вероятны, я использовал короткий здесь, чтобы составить описание проблема проще.
Кто-нибудь может предложить хорошее решение для этого?
DESIRED: небольшая задержка перед отправкой поиска, если нажатия клавиш быстрые, обрабатывается только последнее "значение".
Это может на самом деле решить проблему, описанную выше, на самом деле, скорее всего, так и будет.
Вкратце я посмотрел на «задержку», но поскольку он не может «отменить» выполнение (насколько я понял), для этого потребовалось бы много реализации, как я вижу, но, возможно, у кого-то есть блестящая идея по эта часть.
Иначе у кого-нибудь есть другие идеи, как это сделать?