Michael: Eingabeprüfung in Formularen, hat sich irgendwo was geändert?

Wir entwicklen zur Zeit mit Perl und JavaScript eine Kundendatenbank. Dafür gibt es mehrere Eingabemasken.
Jede Eingabemaske wird mit Update an die Datenbank gesandt und verarbeitet, dann kann mittels Link auf die nächste gesprungen werden. Das spielt sich alles in einem Frame ab.
Unsere Benutzer sind nicht begeistert.
Sie wollen, daß wenn auf den Link nur nächsten Maske geklickt wird, automatisch alle Eingaben der aktuellen Maske in die Datenbank gespeichert werden.
Um den Datenverkehr und die Auslastung des Servers zu minimieren, wollen wir das aber so steuern, daß wenn der User auf den Link zur nächsten Maske klickt, automatisch geprüft wird, ob sich etwas in den Eingabefeldern geändert hat und abhängig davon entweder

  • nur der Sprung zur nächsten Maske oder
  • Update und dann der Sprung
    erfolgt.
    Was tun?
    Im Code haben wir zur Verfügung
  • Feldname + Eingabe, vorbestückt mit altem Inhalt, änderbar durch User
  • Feldname(mit # erweitert), hidden field, alter Inhalt
    Der Algorithmus müsste also prüfen, ob über alle Felder
    Inhalt Feldname <> Inhalt Feldname#
    ist.

Wer kann hier weiterhelfen?
Michael

  1. Hi,

    Was tun?

    den document.formular.feld.value mit dem .defaultValue vergleichen.

    Cheatah

  2. Hi,

    das zweite hidden-Feld mit dem alten Inhalt brauchst du nicht. JavaScript kann auch so ursprünglichen Inhalt (.defaultValue) und aktuellen Inhalt (.value) unterscheiden.

    function isFormChanged (form) {
     for (element = 0; element < document.getElementsByTagName('input').length; element++) with (document.getElementsByTagName('input')[element]) if (value !=  defaultValue) return true;
     return false;
    }

    Diese kleine Funktion checkt alle INPUT-Felder auf Veränderung. (Achtung: funktioniert nur ab N6/IE5/Opera5.) Du solltest dann die Buttons mit dem BUTTON-Befehl machen.

    Bau das ganze dann am besten in den body.unload ein ...

    <body onunload="if (isFormChanged(document.forms[0])) if (confirm('Änderungen speichern?')) with (document.forms[0]) {target = 'dummy'; submit();};">

    Als TARGET lege ich einen unsichbaren dritten Frame "dummy" fest, da das aktuelle Fenster ja gleich aktualisiert wird und das Speichern oft fehl schlägt.

    Alles klar?

    m.