J'utilise la saisie semi-automatique Jquery UI sur un projet existant. Eh bien, la performance est le chien lent, en particulier lors de l'exécution de laCache Jquery UI autocomplete Combobox
input.autocomplete("search", "");
Ma solution était de mettre en cache les informations, de sorte que même si son chien lent, il se produit une seule fois. Je pense qu'il me manque un bug Javascript très simple et j'apprécierais vraiment de l'aider à le poursuivre.
Voici le code
input.autocomplete(
{
delay: 0,
minLength: 0,
source: function (request, response)
{
if (request.term in cache)
{
response(cache[request.term]);
return;
}
// The source of the auto-complete is a function that returns all the select element's child option elements.
var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
response(select.children("option").map(function()
{
var text = $(this).text();
if (this.value && (!request.term || matcher.test(text)))
{
cache[request.term] = text;
return { label: text, value: text, option: this };
}
}));
},
select: function (event, ui)
{
// On the select event, trigger the "selected" event with the selected option. Also update the select element
// so it's selected option is the same.
ui.item.option.selected = true;
self._trigger("selected", event,
{
item: ui.item.option
});
},
change: function (event, ui)
{
// On the change event, reset to the last selection since it didn't match anything.
if (!ui.item)
{
$(this).val(select.children("option[selected]").text());
return false;
}
}
});
// Add a combo-box button on the right side of the input box. It is the same height as the adjacent input element.
var autocompleteButton = $("<button type='button' />");
autocompleteButton.attr("tabIndex", -1)
.attr("title", "Show All Items")
.addClass("ComboboxButton")
.insertAfter(input)
.height(input.outerHeight())
.append($("<span />"))
autocompleteButton.click(function()
{
// If the menu is already open, close it.
if (input.autocomplete("widget").is(":visible"))
{
input.autocomplete("close");
return;
}
// Pass an empty string as value to search for -- this will display all results.
input.autocomplete("search", "");
input.focus();
});
Presque tous, il est un exemple de code par défaut jquery UI combobox à l'exception de ma faible tentative de mise en cache. Il retourne chaque personnage dans la liste déroulante.
Par exemple, si un ensemble de solution de retour est canaille, et la prochaine a été foobar les "données mises en cache" ressemblera à ceci f o o b un r chacun sur sa propre ligne
J'ai besoin qu'il soit canaille foobar
Ce serait vraiment bien si cela a également fonctionné pour une chaîne vide car c'est mon appel le plus taxant.
Merci pour votre aide
Nous sommes une boutique .net ici, donc côté serveur est C# – Aardvark
Il y a plusieurs façons de gérer cela. Le meilleur moyen que j'ai trouvé est de simplement mettre en cache l'ensemble des résultats et de l'expirer après un certain temps. Chaque requête subséquente va à l'encontre du cache. –