2016-04-15 13 views
0

Ich habe Code, der asynchron eine Speichermethode auf dem Server aufruft, wenn ein Benutzer ein Textfeld verlässt. Es ist jedoch möglich, dass die Benutzer lange Zeit in einem einzigen Textfeld verweilen, ohne zu gehen, und wenn ihre Sitzung abläuft, verlieren sie, was sie beim Versuch zu speichern eingegeben haben. Also möchte ich auch regelmäßig sparen (vielleicht einmal pro Minute).So implementieren Sie die automatische Speicherung

Ich denke, ich könnte ein onfocus Ereignis hinzufügen, das das Feld einmal pro Minute speichern wird, aber dann könnte ich Onblur verwenden, um das Ereignis zu entfernen, wenn sie gehen.

Randnotiz: Jedes Mal, wenn es automatisch gespeichert wird, startet das Session-Timeout neu. Um zu verhindern, dass ihre Sitzung auf unbestimmte Zeit läuft, überprüfe ich auch, wie lange es seit dem letzten Tastendruck vergangen ist und speichere nicht, wenn es länger als eine Minute (oder was auch immer das Speicherintervall ist) ist.

Auf der einen Seite scheint dies zu kompliziert zu sein und so muss ich fragen: Gibt es etwas einfacher, einfacher, dies zu erreichen? Und wenn nicht, sollte ich mich dann sehr für Szenarien interessieren, in denen das onblur-Ereignis nicht aufgerufen wird und das automatische Speicherereignis nicht getrennt wird?

+0

Ich denke, Sie machen es komplizierter, als es sein muss, indem Sie die Bindung mit Ihrer automatischen Speicherfunktion kombinieren. Ich denke, das könnte einfacher werden, wenn Sie diese beiden Konzepte trennen. –

+0

Randnotiz: Was ist der Sinn einer Sitzung, wenn sie nicht lang genug ist, damit der Benutzer eingeben kann, was er benötigt? Ich zum Beispiel mag es manchmal, einen Tab zu öffnen und ein paar Dutzend Zeilen zu schreiben, dann zu Abend zu essen und zu duschen und zwei Stunden später zurück zu kommen, um meinen Text zu beenden. Aber für Ihre Frage, anstatt Ereignishandler hinzuzufügen und zu entfernen, speichern Sie einfach die gesamte Sache, die zuletzt gespeichert wurde. Wenn sich nichts geändert hat, speichere nicht. – Siguza

+0

@Quantastical Es ist für eine Performance-Management-Anwendung, die von einem großen Unternehmen auf der ganzen Welt verwendet wird. Während des anstrengenden Teils der Review-Saison im letzten Jahr gab es eine Menge Beschwerden über Leute, die Daten verloren haben. In 95% der Fälle war es so, weil die Sitzung abgelaufen war oder die Verbindung unterbrochen wurde. Wir schlugen vor, dass wir automatisch speichern können, wenn sie das Feld verlassen, aber sie haben gefragt, dass es auch regelmäßig spart, selbst wenn sie das Feld nicht verlassen.Wenn es nach mir ginge, würde ich ihnen sagen, dass sie ihnen nur sagen müssen, dass sie häufiger den "Dang Save" -Knopf drücken müssen. :) – BVernon

Antwort

1

Um "Befestigung" und "Abnehmen" Ereignisse in onfocus und onblur zu vermeiden:

  • In onfocus, nur den aktuellen fokussierten Feld (DOM-Knoten) zu den Schuß Variable

  • Haben Sie nur eine setInterval globalen Timer für automatisch speichert, wird es den Feldwert des Feldes aus diesen Variablen

In Bezug auf Sitzungsfortsetzungs speichern:

  • Solange Änderungen Feldwert, dies bedeutet, dass es Benutzer geändert [es sei denn Editor ist sehr dynamisch und tut Selbst Bearbeitung]

  • So gibt es keine Notwendigkeit, auf Tastendruck aufzeichnen, halten nur die
    Last_Saved_Field_Value, um dasselbe zweimal zu verhindern.

Verwandte Themen