J'utilise cette petite fonction dans le même but, en exécutant une fonction après que l'utilisateur a cessé de taper pendant une durée déterminée ou dans des événements qui se déclenchent à un rythme élevé, tels que resize
:
function delay(callback, ms) {
var timer = 0;
return function() {
var context = this, args = arguments;
clearTimeout(timer);
timer = setTimeout(function () {
callback.apply(context, args);
}, ms || 0);
};
}
// Example usage:
$('#input').keyup(delay(function (e) {
console.log('Time elapsed!', this.value);
}, 500));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label for="input">Try it:
<input id="input" type="text" placeholder="Type something here..."/>
</label>
Comment cela fonctionne :
El delay
renvoie une fonction enveloppée qui gère en interne une minuterie individuelle. À chaque exécution, la minuterie est redémarrée avec le délai fourni, si plusieurs exécutions ont lieu avant que ce délai ne soit écoulé, la minuterie est simplement réinitialisée et recommence.
Lorsque la minuterie se termine enfin, la fonction de rappel est exécutée, en passant le contexte et les arguments d'origine (dans cet exemple, l'objet événement de jQuery, et l'élément DOM en tant que this
).
MISE À JOUR 2019-05-16
J'ai réimplémenté la fonction en utilisant les fonctionnalités ES5 et ES6 pour les environnements modernes :
function delay(fn, ms) {
let timer = 0
return function(...args) {
clearTimeout(timer)
timer = setTimeout(fn.bind(this, ...args), ms || 0)
}
}
La mise en œuvre est couverte par un série de tests .
Pour quelque chose de plus sophistiqué, jetez un coup d'œil à jQuery Typewatch plugin.
4 votes
Duplicata de stackoverflow.com/questions/1620602/
2 votes
Si je pouvais, je fermerais ceci comme un doublon.
11 votes
Je ne vois pas l'intérêt d'avoir des doublons, tant que les réponses données et acceptées sont correctes. L'enrichissement de la base de données des questions doit être une bonne chose et un objectif à atteindre.
17 votes
Le problème, c'est que les gens ne pourront pas profiter des réponses brillantes que chacun partage s'il y a 100 questions identiques. Il est donc préférable de fermer les doublons et de rediriger tout le monde vers la question originale pour trouver les meilleures pratiques et les corrections. Voir stackoverflow.com/help/duplicates pour plus d'informations sur les raisons pour lesquelles les doublons sont fermés.
27 votes
C'est bien plus populaire que celui qu'il est censé dupliquer. Il est mieux formulé, il a de meilleures réponses, il est mieux classé sur Google, etc. Tant de personnes ont bénéficié de cette réponse. Rétrospectivement, il aurait été dommage de la fermer. Il y a des réponses triviales qui sont mauvaises en tant que doublons, mais celle-ci n'entre pas dans cette catégorie.
1 votes
Il s'agit d'une meilleure question que celle qui est considérée comme la cible que cette question duplique pour une raison simple : le titre de la question.
1 votes
C'est pourquoi Stackoverflow permet de modifier les questions, afin qu'elles puissent être améliorées pour refléter plus précisément la version réelle et plus générique du problème, à mesure que la communauté commence à mieux comprendre la question. Le titre est aussi probablement la raison pour laquelle cette question est plus populaire et mieux classée sur Google (bien que cela dépende, bien sûr, de l'approche adoptée par quelqu'un pour arriver ici ; les bons mots clés feraient presque certainement mieux classer l'autre question). Si l'autre question avait été améliorée et clarifiée, il ne fait aucun doute qu'elle aurait reçu tout le trafic que cette question a reçu.
0 votes
Détecter quand l'utilisateur tape "done
2 votes
Je suis étonné par le peu de mentions de "debounce". Les réponses correctes sont les différentes implémentations du débordement.