J'ai examiné de nombreuses autres questions et trouvé des réponses très simples, y compris le code ci-dessous. Je veux simplement détecter quand une personne modifie le contenu d'une zone de texte mais que, pour une raison quelconque, cela ne fonctionne pas ... Je ne reçois aucune erreur de console. Lorsque je définis un point d'arrêt dans le navigateur à la fonction change()
, il ne le frappe jamais.
$('#inputDatabaseName').change(function () {
alert('test');
});
<input id="inputDatabaseName">
Vous pouvez utiliser le input
Javascript event dans jQuery comme ceci:
$('#inputDatabaseName').on('input',function(e){
alert('Changed!')
});
En JavaScript pur:
document.querySelector("input").addEventListener("change",function () {
alert("Input Changed");
})
Ou comme ceci:
<input id="inputDatabaseName" onchange="youFunction();"
onkeyup="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();"/>
essayez keyup au lieu de changer.
<script type="text/javascript">
$(document).ready(function () {
$('#inputDatabaseName').keyup(function () { alert('test'); });
});
</script>
Voici la documentation officielle de jQuery pour .keyup () .
Chaque réponse manque quelques points, voici donc 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 Input Event
se déclenche à l’entrée du clavier , en faisant glisser la souris , Remplissage automatique et Copier-coller testé sur Chrome et Firefox. Le fait de vérifier la valeur précédente permet de détecter les changements réels, ce qui signifie que vous ne devez pas déclencher lorsque vous collez la même chose, ne tapez pas le même caractère, etc.
Exemple de travail: http://jsfiddle.net/g6pcp/473/
mise à jour:
Et si vous souhaitez exécuter votre change function
uniquement lorsque l'utilisateur a fini de taper et empêcher le déclenchement de l'action de modification à plusieurs reprises, 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
de s'exécuter pour chaque lettre que l'utilisateur tape et ne fonctionne que lorsque l'utilisateur arrête de taper. recherche entrées), de cette façon le serveur ne recherche qu’un recherche de foobar
et non six recherches de f
, puis de fo
puis foo
et foob
et ainsi de suite.
Les entrées de texte ne déclenchent pas l'événement change
tant qu'elles n'ont pas perdu la mise au point. Cliquez en dehors de l'entrée et l'alerte s'affichera.
Si le rappel doit se déclencher avant que l'entrée de texte ne perd son focus, utilisez l'événement .keyup()
.
onkeyup, onpaste, onchange, oninput
semble échouer lorsque le navigateur effectue le remplissage automatique des zones de texte. Pour traiter un tel cas, incluez "autocomplete='off'
" dans votre champ de texte pour empêcher le navigateur de remplir automatiquement la zone de texte,
Par exemple,
<input id="inputDatabaseName" autocomplete='off' onchange="check();"
onkeyup="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();" />
<script>
function check(){
alert("Input box changed");
// Things to do when the textbox changes
}
</script>
Dans mon cas, j'avais une zone de texte qui était attachée à un sélecteur de date. La seule solution qui a fonctionné pour moi a été de le gérer dans l'événement onSelect du datepicker.
<input type="text" id="bookdate">
$("#bookdate").datepicker({
onSelect: function (selected) {
//handle change event here
}
});
Je pense que vous pouvez aussi utiliser keydown
:
$('#fieldID').on('keydown', function (e) {
//console.log(e.which);
if (e.which === 8) {
//do something when pressing delete
return true;
} else {
//do something else
return false;
}
});