2010-02-04 8 views
0

J'essaye de montrer des données dans une liste déroulante de remplissage automatique de JQuery. Les informations sont extraites d'une dynamique ASPX:JQuery Autocomplete étrange comportement de mise au point

$("#<%= this.txt.ClientID %>").autocomplete('<%=this.ResolveUrl("~/Page.aspx") %>') 

Il est évident que je ne veux pas faire plus GETs que nécessaire, donc j'avoir un peu de contrôle avec Java minuterie (sur chaque pression de touche):

if (timerActive) { 
    stopTimer(); 
} 

timer = setTimeout('obtainItems()', 800); 
timerActive = true; 

et les éléments n'obtenir:

$("#<%= this.txt.ClientID %>").autocomplete('<%=this.ResolveUrl("~/Page.aspx") %>') 
stopTimer(); 

Cette chose fonctionne en général, mais j'ai vu un comportement spécial avec des flèches et AvPag. Lorsque les enregistrements de la liste déroulante sont affichés, si j'appuie sur AvPag, le composant sélectionne l'enregistrement correct, mais après deux secondes revient à la précédente.

Ma première théorie était que le fichier .autocomplete était en train de réinitialiser le focus, mais j'ai remarqué que ce n'était pas correct. Je pensais que c'était un bug (BUG LINK) mais ça ne marche pas aussi.

S'il vous plaît, si quelqu'un peut vous aider ... merci beaucoup!

+0

vous savez qu'il existe une option sur la saisie semi-automatique retarder l'obtention en fonction des coups de touches? , délai: 900 –

Répondre

0

Fonctionne-t-elle comme souhaité sans la minuterie?

Je suppose que votre événement onkeypress est déclenché, l'utilisateur sélectionne ce qu'il veut, puis l'événement timer se déclenche et réinitialise les éléments.

ajouter une variable

var selected = false; 

et joindre un événement sélectionné à votre saisie semi-automatique et un ensemble sélectionné = true

ont votre obtainItem ressembler à ceci:

function obtainItems() 
{ 
    if (!selected) 
    { 
     $("#<%= this.txt.ClientID %>").autocomplete('<%=this.ResolveUrl("~/Page.aspx") %>') 
     stopTimer(); 
    } 
}