J'ai constaté que l'événement de modification jQuery dans une zone de texte ne se déclenche que lorsque je clique en dehors de cette zone.
HTML:
<input type="text" id="textbox" />
JS:
$("#textbox").change(function() {alert("Change detected!");});
Voir démo sur JSFiddle
Mon application nécessite que l'événement soit déclenché à chaque changement de caractère dans la zone de texte. J'ai même essayé d'utiliser keyup à la place ...
$("#textbox").keyup(function() {alert("Keyup detected!");});
... mais on sait que l'événement keyup n'est pas déclenché par un clic droit et collé.
Une solution de contournement? Est-ce que le fait d'avoir les deux auditeurs va causer des problèmes?
Le moyen typique de le faire est de se lier aux deux événements. Vous pouvez également vous lier à l'événement de collage.
Vous pouvez vous lier à plusieurs événements comme ceci:
$("#textbox").on('change keyup paste', function() {
console.log('I am pretty sure the text box changed');
});
Si vous voulez être pédant à ce sujet, vous devez également vous connecter à mouseup pour gérer le déplacement de texte et ajouter une variable lastValue
pour vous assurer que le texte a réellement changé:
var lastValue = '';
$("#textbox").on('change keyup paste mouseup', function() {
if ($(this).val() != lastValue) {
lastValue = $(this).val();
console.log('The text box really changed this time');
}
});
Et si vous voulez être super duper
pédant, vous devriez utiliser un minuteur à intervalles pour prendre en charge le remplissage automatique, les plugins, etc.:
var lastValue = '';
setInterval(function() {
if ($("#textbox").val() != lastValue) {
lastValue = $("#textbox").val();
console.log('I am definitely sure the text box realy realy changed this time');
}
}, 500);
Sur les navigateurs modernes, vous pouvez utiliser l'événement input
:
$("#textbox").on('input',function() {alert("Change detected!");});
if you write anything in your textbox, the event gets fired.
code as follows :
HTML:
<input type="text" id="textbox" />
JS:
<script type="text/javascript">
$(function () {
$("#textbox").bind('input', function() {
alert("letter entered");
});
});
</script>
$(this).bind('input propertychange', function() {
//your code here
});
Cela fonctionne pour taper, coller, cliquer avec le bouton droit de la souris, etc.
Essaye ça:
$("#textbox").bind('paste',function() {alert("Change detected!");});
Voir démo sur JSFiddle .
La lecture de vos commentaires m'a amené à une solution sale. Ce n'est pas une bonne façon, je sais, mais ça peut être un moyen de contourner.
$(function() {
$( "#inputFieldId" ).autocomplete({
source: function( event, ui ) {
alert("do your functions here");
return false;
}
});
});
Essayez le code ci-dessous:
$("#textbox").on('change keypress paste', function() {
console.log("Handler for .keypress() called.");
});