JavaScript - Erkennung von änderung in eine textarea
Ich würde gerne den Wert von zwei Texteingabefelder immer gleich sein.
Hören für ein "change" - Ereignis ist nicht ausreichend, weil ich will, dass diese Felder gleich sein, selbst wenn man den Fokus hat.
Hören für eine Taste scheint nicht zu funktionieren, da dieses event wird ausgelöst, bevor das Feld den Wert aktualisiert sich mit der neuen Buchstaben, also ich bin mir nicht sicher ob es eine gute Möglichkeit, um den aktuellen Wert des Feldes mit einer keypress-handler, um zu kopieren Sie ihn auf das andere Feld.
Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie etwa das keyup-Ereignis?
paste
Fall im IE und iminput
event in FF sind auch Wert das erwähnenIch habe das gleiche problem...
Den Wert einer textarea kann geändert werden, indem eine Menge von Möglichkeiten... ich erwähne nur die, die ich nicht wissen, wie zu erkennen:
Hatte ich versucht, erstellen Sie einen Ereignishandler für jedes Ereignis, das ich kenne (onkeyup, onkeydown, onmouseup, onmousedown, etc...) aber mit einigen früheren Möglichkeiten, zu Fügen, wird niemand gefeuert, also keine Möglichkeit zu kontrollieren, wenn Sie Auftritt.
Ich sehe keine andere Lösung, als wenn ein timer.
Ah! können die Inhalte auch ändern, ohne den Fokus... Fälle von Drag&Drop.
Und nicht zu schweigen, wenn auch verändert werden kann durch JavaScript die top mot hässliche Ding zu dected... keine Methode ist gefeuert!!!
Ich nicht möchten, setzen Sie einen timer (das ist sehr hässlich, Dinge zu tun und potentionaly Fehler verursachen).
Wenn der timer ausgelöst wird, aber eine andere Seite laden (Benutzer auf einen link geklickt)... müssen Sie kontrollieren alle Objekte vorhanden... sonst wird es eine Fehlermeldung bringt (manche Browser zeigen es als modales Fenster, während andere es ignorieren)... so erhält der user eine sehr schlechte impresion... und im schlimmsten Fall... der Aufruf der Ereignisprozedur können scheitern, weil Sie Ihre Funktion wurde zerstört, bevor der timer aufgerufen werden.
Mit Timer immer müssen Seite entladen, so deaktiviert oder zerstört, wenn die Seite getötet wird, zum Beispiel, wenn Sie wechseln zu einer anderen Seite.
Diese Dinge erschweren viel mehr als nötig und sind schrecklich zu aktualisieren, in eine Zukunft.
Sicherzustellen Timer wird nicht scheitern ich tun, diese Art der hässliche Ding als ersten Satz auf Sie:
clearTimeout(MyTimer);
Und wenn ich die timer-Wiederholung alle X Millisekunden... innerhalb der Funktion, die ich tun
setTimeout(function(){MyFunction();)
In dieser Weise, wenn die Dinge zerstört werden, in unangemessener anderen keine Fehler, verursacht durch den Aufruf von timer-handler.
Auch auf jeden Satz in der Funktion MyFunction muss Fehler controlated... ein beliebiges Objekt verwendet wird, muss gewährleisten, dass die existiert... auf jeden Satz... das ist imposible zu tun.. so ein try catch muss Hinzugefügt werden.
Die andere Sache, die getan werden kann, bei der Verwendung von Timer ist, zu ignorieren, zu zerstören, Probleme und lassen Sie die Benutzer erhalten einen sehr schlechten Eindruck, wenn die Seite entladen wird.
Um sicherzustellen, dass kein Timer wird gestartet... das einzige was ich weiß ist, ser das body onunload... aber einige hässliche Browsern nicht ausgelöst, es (zu vermeiden Programmierer nicht lassen Sie gehen zu einer anderen Seite)... also ich muss Dinge tun, als wenn onunload nicht vorhanden... also timer aufgerufen werden können, wenn Objekte zerstört werden... können Fehler auftreten, immer...
Also zu heikel, um sicherzustellen, dass keine Fehler-windows wird beim benutzen der Timer:
Sehen, was ich sage... zu hässlich code... aber alle versuche sind notwendig, sonst einige Browser eine Fehler-Meldung an, dass etwas nicht existiert, wenn entladen Seite tritt.
Gut ist es auch am schlimmsten, wirklich sicher wirst du mit dieser versuchen:
Aber solche secuence von Try{}Catch{} ist die gleiche wie die Gruppierung alle auf einer... also kein Vorteil... wie man sehen kann Timer sind sehr schmerzhaft werden eingesetzt... nur weil es keine Möglichkeit gibt, um sicherzustellen, dass keine Fehler auftreten werden.
Ist die Ursache dieser secuence von Ereignissen bei einigen Browsern:
(gleichzeitig)
Zum Beispiel, während Sie ausgeführt wird jede Zeile code in einem timer, der JavaScript-manager zerstören bei einigen Browsern, und so wird es nicht und der browser wird ein modales Fenster sagen, Ihre Seite ist baddly codiert, kann der Satz auch so einfach wie diese:
alert('bla bla bla');
Bis jetzt finde ich das nicht sowieso zu vermeiden... ausser, tun Sie dies auf allen Timern:
Und weder ist es eine perfekte Lösung... wenn der browser nur zerstören de JavaScript-manager nur, wenn der timer ausgelöst wird, aber vor dem ersten ausprobieren (in der Nähe eine perfekte Millisekunde sycn race-Bedingung) es bewirkt, dass browser, um die Botschaft zu präsentieren.
Aber da manchmal etwas, aber nach einer Weile... nicht eine bessere /perfekte Lösung, das ist das beste, das ich tun kann!!
Ich persönlich hasse so schlecht kodierten Browser (einer von Ihnen ist der DH), aber ich muss Sie unterstützen!!!
Browser-spezifische Methoden wurden hier diskutiert: onpropertychange für eine textbox in Firefox?
Jedoch, nach diversen versuchen fand ich nur cross-browser-Methode zu nutzen, um die Fenster.setInterval (), um änderungen zu prüfen (alle 20 Millisekunden, zum Beispiel). Nicht elegant, aber sehr effektiv.
//
Weisen Sie die onkeyup Funktion und onchange auf die Texteingabefelder, die Sie wollen, um miteinander zu reflektieren.
Zum Beispiel weist der handler alle die Texteingabefelder.
Keyup funktioniert nicht richtig, wenn mit shift+Buchstabe, aber es funktioniert gut, wenn Sie binden Sie es auf das Fenster-Objekt.
Hier ist ein jQuery-plugin, nutzt es:
Verwendung: