2009-06-05 11 views
3

J'ai besoin de mon projet pour fournir une fonctionnalité de saisie semi-automatique pour un textBox comme celui récemment appliqué sur Google. J'ai besoin d'aller chercher des données sur chaque frappe, donc j'appelle une fonction jQuery sur keypress. Le problème est que la fonctionnalité de saisie semi-automatique est déclenchée par un clic de souris dans la zone de texte et non par une pression sur une touche. Je vais joindre l'extrait de code pour une meilleure compréhension du problème qui va comme cecijQuery Problème du plugin de saisie semi-automatique

$(document).keypress(function(){ 
    lastKey = String.fromCharCode(window.event.keyCode); 
    alert('lastKey :: ' + lastKey); 
    var txtVal = document.frm.selectedTechParamName.value + lastKey; 
    alert('txtVal :: ' + txtVal); 
    $("#suggestTechParamName").autocomplete('/AEA-Authoring/TechnicianParameterAutocomplete?userAction=getTechParamsForSvcLvlDataID&txtVal=' + txtVal, { 
     matchContains: true, 
     minChars: 0, 
     cacheLength:0, 
     maxItemsToShow:10 
    }); 
}); 

Maintenant, ce qui se passe est quand une touche est enfoncée les alertes fonctionnent correctement, mais la seconde moitié de la fonction c.-à-

$("#suggestTechParamName").autocomplete('/AEA-Authoring/TechnicianParameterAutocomplete?userAction=getTechParamsForSvcLvlDataID&txtVal=' + txtVal, { 
    matchContains: true, 
    minChars: 0, 
    cacheLength:0, 
    maxItemsToShow:10 
}); 

est appelée lorsque l'on clique sur la zone de texte. De même que vous pouvez voir l'attribut "cacheLength: 0" que j'ai écrit est parce que je ne veux pas que Autocomplete cache des données, mais cela ne semble pas fonctionner. Toute réponse rapide serait appréciée.

+0

Salut - pourriez-vous éditer votre question pour marquer votre code comme du code, donc c'est moins headachy? – karim79

Répondre

1

J'ai utilisé ceci et les choses ont bien fonctionné pour moi.

$(document).ready(function() { 
    $("#suggestTechParamName").autocomplete('/AEA-Authoring/TechnicianParameterAutocomplete', { 
     extraParams: { userAction: 'getTechParamsForSvcLvlDataID' 
        } 
    }); 
}); 
1

Essayez déliant l'événement click de la zone de texte que vous avez attaché votre autocomplétion à:

$("#suggestTechParamName").autocomplete('/AEA-Authoring/TechnicianParameterAutocomplete?userAction=getTechParamsForSvcLvlDataID&txtVal=' + txtVal, { 
    matchContains: true, 
    minChars: 0, cacheLength:0, maxItemsToShow:10 
}).unbind("click"); 
+0

Salut! Lorsque j'ai essayé de dissocier l'événement click, le contenu a cessé de fonctionner. Des suggestions? –

2

Il semble que vous utilisez le JQuery plugin pour y parvenir. J'utilise le même plugin et chaque fois qu'une touche est enfoncée, il envoie une nouvelle requête Ajax au serveur.

Vous avez indiqué que vous définissez cacheLength à 0, conformément au docs, la valeur doit être >= 1. Avez-vous essayé de changer cela pour voir si cela change le comportement?

Edit 1: En outre, selon les documents, il semble que matchContains: true est seulement utile si vous avez cacheLength > 1 (cacheLength = 1 signifie pas la mise en cache, par défaut est cacheLength = 10).

Questions connexes