Il s'agit plutôt d'une question sur ce qui se passe dans mon code. Il fonctionne, mais j'ai besoin d'un peu d'éclaircissement...
J'utilise jQuery pour créer un récepteur d'événements sur un élément de saisie de texte. Le code HTML serait simplement le suivant :
<input type="text" id="autocomplete" size="50" />
J'ai besoin de recevoir des événements chaque fois que quelqu'un tape quelque chose dans ce champ, et pour éviter d'être inondé d'événements, j'ai configuré l'écouteur d'événements avec un minuteur de sorte que mon code d'écouteur d'événements ne s'exécute que si l'utilisateur n'a pas tapé quelque chose pendant 125 ms :
jQuery('#autocomplete').keyup(function(e) {
e.preventDefault();
clearTimeout(this.timer);
this.timer = setTimeout(function() {
jQuery.getJSON([URL goes here], function(data) {
// processing of returned data goes here.
}
}, 125);
console.log(this);
});
Cela fonctionne, mais je ne suis pas sûr de bien comprendre ce qui se passe ici. Comme vous le voyez dans le morceau de code ci-dessus, je dois garder une trace de l'élément ID
du timer qui a été créé lors du dernier événement. Je le fais en le stockant dans this.timer
. Cependant, le this
Dans ce cas, le mot-clé fait référence à l'élément d'entrée. C'est ce que console.log
des sorties :
<input type="text" id="autocomplete" size="50" />
Est-il possible d'enregistrer la minuterie ID
sur l'élément de saisie ? Pour ce que j'en sais, il se peut que je fasse quelque chose de stupide. S'agit-il d'une "meilleure pratique" ou s'agit-il de quelque chose de très différent ?