Leider gibt es kein Ereignis oder eine Reihe von Ereignissen, die Ihren Kriterien entsprechen. Tastendruck und Kopieren/Einfügen können beide mit dem keyup
Ereignis. Änderungen durch JS sind schwieriger. Wenn Sie die Kontrolle über den Code haben, der das Textfeld festlegt, ist es am besten, ihn so zu ändern, dass er entweder Ihre Funktion direkt aufruft oder ein Benutzerereignis für das Textfeld auslöst:
// 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');
});
Wenn Sie keine Kontrolle über diesen Code haben, können Sie setInterval()
um das Textfeld auf Änderungen zu 'überwachen':
// Check the textbox every 100 milliseconds. This seems to be pretty responsive.
setInterval(watchTextbox, 100);
Diese Art der aktiven Überwachung erfasst Aktualisierungen zwar nicht "sofort", aber sie scheint schnell genug zu sein, so dass es keine spürbare Verzögerung gibt. Wie DrLouie in den Kommentaren anmerkte, ist diese Lösung wahrscheinlich nicht gut skalierbar, wenn Sie viele Eingaben überwachen müssen. Sie können den 2. Parameter immer auf setInterval()
mehr oder weniger häufig zu überprüfen.