2010-03-20 8 views
2

Les gars, tous les plugins autocomplete et les fonctions que j'ai trouvés, ils ne se mettent à jour que sur keyup/down, etc. C'est bien, mais la recherche ne commence que lorsque l'utilisateur a cessé de taper et en tapant une phrase ou un mot, le script est incapable de commencer instantanément à suggérer, etc.Saisie semi-automatique JavaScript lors de la saisie

Je sais que ce sera une solution ou une suggestion très simple pour certains d'entre vous, donc toute aide serait grandement appréciée quant à la façon dont je peut le convertir pour être instantanément comme une clé est pressée.

Un exemple de l'effet désiré est la recherche Google Suggest ou Facebook, une recherche est déclenchée instantanément par pression ou changement de touche, comment puis-je l'émuler?

Merci!

Répondre

1

Cela dépend de la taille de l'espace que vous cherchez et comment bien vos serveurs sont. La recherche sur Facebook (j'imagine que les noms des personnes) est rapide parce que vous ne faites que la recherche d'un millier de contacts. Google est rapide parce qu'ils investissent beaucoup d'argent dans l'infrastructure et mettent en cache beaucoup de réponses.

Sur l'un de mes projets, j'ai utilisé le plugin jQuery this et il fournit d'excellentes performances sur les résultats en cache. Nous l'avons utilisé pour fournir des fonctionnalités de saisie semi-automatique sur une liste d'environ 6 000 contacts (noms, etc.). Est-ce ce que vous aviez en tête?

2

Est-ce que c'est ce que vous voulez dire? Ou voulez-vous que Ajax récupère d'une base de données?

var data = "Core Selectors Attributes Traversing Manipulation CSS Events Effects Ajax Utilities".split(" "); 
    $("#example").autocomplete(data); 

JQuery

Edit: Je ne suis pas sûr que je sais ce que vous entendez, parce que cet exemple semble fonctionner identique à Google Suggest ou Facebook. Si votre base de données était petite, vous pouvez télécharger le cache dans les données variables lors du chargement de la page. Si votre base de données était légèrement plus grande, vous LIMITEZ le cache à seulement X nombre de réponses pour chaque caractère alphabétique ou série de caractères. (c'est-à-dire WHERE city LIKE 'aa%' LIMIT 10 AND WHERE ...)

+1

Ce n'est pas ma question. Je suis capable de récupérer via AJAX, pas un problème. Je demande simplement comment je peux déclencher l'événement instantanément lorsque le texte est modifié, et non à la fin de la touche. Le chemin actuel est lent et ne fournit pas de réponse instantanée. – James

1

Le framework Wicket web a le concept d'un comportement de "throttling". Normalement, les requêtes AJAX dans les applications Wicket sont mises en file d'attente par rapport à un "canal ajax", qui déclenche une requête instantanément si aucune n'est en cours d'exécution. Si une requête est déjà en cours d'exécution, la requête suivante est mise en file d'attente et déclenchée lorsque la requête en cours est renvoyée. "Throttling" permet au comportement de se retarder pendant un certain temps (disons, deux secondes). Si le comportement se déclenche à nouveau dans la même période, le rappel pour le comportement le plus récent remplace le rappel pour le comportement en attente en cours. (Par exemple, l'utilisateur commence à taper "albuquerque", ce qui déclenche les événements "A" puis "AL", puis "ALB" .Le système peut déclencher "A", puis "ALB", en sautant "AL" parce qu'il était remplacé par "ALB" en étant assis dans la file d'attente.) Le but de ceci est de déclencher un comportement instantanément à chaque pression de touche, mais empêcher le serveur d'être inondé de requêtes inutiles.

Vérifiez le guichet du code source ajax: http://svn.apache.org/repos/asf/wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js

Pour en savoir plus sur le framework web, voir: http://wicket.apache.org

+2

Je pense que le terme correct pour le comportement que vous avez décrit (Si le comportement se déclenche à nouveau dans la même période, le rappel pour le comportement le plus récent remplace le rappel pour le comportement en attente en cours.) Est 'Debouncing' lisser le bavardage mécanique dans les interrupteurs. –