Malheureusement, aucun événement ou ensemble d'événements ne correspond à vos critères. Les pressions sur les touches et les copier/coller peuvent tous deux être gérés par la fonction keyup
événement. Les modifications par JS sont plus délicates. Si vous avez le contrôle du code qui définit la zone de texte, votre meilleure chance est de le modifier pour qu'il appelle directement votre fonction ou déclenche un événement utilisateur sur la zone de texte :
// Compare the textbox's current and last value. Report a change to the console.
function watchTextbox() {
var txtInput = $('#txtInput');
var lastValue = txtInput.data('lastValue');
var currentValue = txtInput.val();
if (lastValue != currentValue) {
console.log('Value changed from ' + lastValue + ' to ' + currentValue);
txtInput.data('lastValue', currentValue);
}
}
// Record the initial value of the textbox.
$('#txtInput').data('lastValue', $('#txtInput').val());
// Bind to the keypress and user-defined set event.
$('#txtInput').bind('keypress set', null, watchTextbox);
// Example of JS code triggering the user event
$('#btnSetText').click(function (ev) {
$('#txtInput').val('abc def').trigger('set');
});
Si vous n'avez pas le contrôle de ce code, vous pouvez utiliser setInterval()
pour "surveiller" les modifications apportées à la zone de texte :
// Check the textbox every 100 milliseconds. This seems to be pretty responsive.
setInterval(watchTextbox, 100);
Ce type de surveillance active ne permet pas d'obtenir des mises à jour "immédiatement", mais elle semble suffisamment rapide pour qu'aucun décalage ne soit perceptible. Comme DrLouie l'a souligné dans les commentaires, cette solution n'est probablement pas adaptée si vous devez surveiller de nombreuses entrées. Vous pouvez toujours ajuster le 2ème paramètre à setInterval()
pour vérifier plus ou moins fréquemment.
0 votes
Voir stackoverflow.com/questions/574941/ y stackoverflow.com/questions/1847893/
1 votes
stackoverflow.com/questions/1159046/