Ich habe festgestellt, dass das jQuery-Änderungsereignis in einem Textfeld erst ausgelöst wird, wenn ich außerhalb des Textfelds klicke.
HTML:
<input type="text" id="textbox" />
JS:
$("#textbox").change(function() {alert("Change detected!");});
Siehe Demo zu JSFiddle
In meiner Anwendung muss das Ereignis bei jeder Zeichenänderung im Textfeld ausgelöst werden. Ich habe sogar versucht, stattdessen Keyup zu verwenden ...
$("#textbox").keyup(function() {alert("Keyup detected!");});
... aber es ist bekannt, dass das Keyup-Ereignis nicht beim Klicken mit der rechten Maustaste ausgelöst wird.
Irgendeine Problemumgehung? Wird es Probleme geben, wenn beide Hörer Probleme haben?
Antworten:
Die Bindung an beide Ereignisse ist der typische Weg, dies zu tun. Sie können auch an das Einfügeereignis binden.
Sie können an mehrere Ereignisse wie folgt binden:
Wenn Sie pedantisch sein möchten, sollten Sie sich auch an mouseup binden, um das Ziehen von Text zu ermöglichen, und eine
lastValue
Variable hinzufügen , um sicherzustellen, dass sich der Text tatsächlich geändert hat:Und wenn Sie
super duper
pedantisch sein möchten, sollten Sie einen Intervall-Timer verwenden, um die automatische Füllung, Plugins usw. zu berücksichtigen:quelle
.on('change keyup paste', function() {...}
feuert tatsächlich mehrmals! Wenn ich ein Zeichen eingegeben und dann nach draußen geklickt habe, werden die Ereignisse 'change' und 'keyup' ausgelöst, was dazu führt, dass die Funktion mehrmals ausgeführt wird! Wenn ich mit der rechten Maustaste eingefügt und dann nach außen geklickt habe, werden sowohl "Ändern" als auch "Einfügen" ausgelöst. Teufel! Wenn Sie Strg + V zum Einfügen verwenden und dann nach außen klicken, wird es dreimal ausgelöst !!lastValue
Variablen hinzufügen, um sicherzustellen, dass sie sich tatsächlich geändert hat.In modernen Browsern können Sie das
input
Ereignis verwenden :DEMO
quelle
Dies funktioniert zum Tippen, Einfügen, Klicken mit der rechten Maustaste usw.
quelle
HTML:
JS:
quelle
Versuche dies:
Siehe Demo zu JSFiddle .
quelle
bind()
?keyup
undchange()
hat ihr eigenes typisches Verhalten so id er will Ereignis auszuführen , dannpaste
konnte die Optionbind
statton
.Versuchen Sie den folgenden Code:
quelle
event to be fired on every character change in the textbox
"...but it's a known fact that the keyup event isn't fired on right-click-and-paste."
Das Lesen Ihrer Kommentare brachte mich zu einer schmutzigen Lösung. Ich weiß, dass dies kein richtiger Weg ist, aber eine Lösung sein kann.
quelle