Chaque réponse manque certains points, alors voici ma solution :
$("#input").on("input", function(e) {
var input = $(this);
var val = input.val();
if (input.data("lastval") != val) {
input.data("lastval", val);
//your change action goes here
console.log(val);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input">
<p>Try to drag the letters and copy paste</p>
Le site Input Event
incendies sur Clavier l'entrée, Déplacement de la souris , Remplissage automatique et Copier-coller testé sur Chrome et Firefox. La vérification de la valeur précédente lui permet de détecter les changements réels, ce qui signifie qu'il ne se déclenche pas en collant la même chose ou en tapant le même caractère, etc.
Exemple de travail : http://jsfiddle.net/g6pcp/473/
mettre à jour :
Et si vous aimez diriger votre change function
uniquement lorsque l'utilisateur a fini de taper et éviter de déclencher plusieurs fois l'action de modification, vous pouvez essayer ceci :
var timerid;
$("#input").on("input", function(e) {
var value = $(this).val();
if ($(this).data("lastval") != value) {
$(this).data("lastval", value);
clearTimeout(timerid);
timerid = setTimeout(function() {
//your change action goes here
console.log(value);
}, 500);
};
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input">
Si l'utilisateur commence à taper (par exemple "foobar") ce code empêche votre change action
s'exécute pour chaque lettre tapée par l'utilisateur et ne s'exécute que lorsque l'utilisateur cesse de taper, ce qui est particulièrement utile lorsque vous envoyez l'entrée au serveur (par exemple, les entrées de recherche), de cette façon le serveur fait seulement un recherche de foobar
et pas six recherches pour f
et ensuite fo
et ensuite foo
et foob
et ainsi de suite.
1 votes
Juste deux choses à essayer : donnez à l'entrée un type="text" et faites-en un élément singleton. <input id="inputDatabaseName" type="text"/>