Daniela Koller: Formular abschicken und an eine Stelle im Dokument springen

Hi Leute

Ich habe eine Baumstruktur die relativ gross werden kann und
deswegen Äste auf und zugeklappt werden können. Bei den
einzelnen Zeilen des Baums können Daten erfasst werden.
Das ganze stellt einen Kontenplan dar für den auf den
hierarchisch tiefsten Blättern jeweils Beträge erfasst werden
können. Auf dieses Darstellungskonzept habe ich keinen
Einfluss.

Das Problem liegt jetzt beim Aufkappen eines Teilbaums. Das
Formular muss übermittelt werden, es dürfen also keine
Beträge verloren gehen, auch nicht wenn kein Javascript
verfügbar ist. Da das Formular aber sehr gross sein kann
wenn viel aufgeklappt ist (mehrere 100 Zeilen bis ein paar
1000), soll danach an die Stelle gesprungen werden, wo
er expandiert hat.

Einen zweiten Request mit dem jetzt bekannten Anker möchte
ich vermeiden da dahinter ein relativ komplettes Servlet
mit Corba-Aufrufen steht dessen Ausführung teuer(Rechenzeit,
Antwortzeit) ist.

Meine Idee war jetzt, das ich vor dem Absenden mit Javascript
onClick dynamisch die form.action ändere und da direkt den
Anker hineinmache vor dem eigentlichen Request. Das ganze
funktioniert auch ganz gut mit einem aktuellen Mozilla, nur
leider ist hier im Intranet IE 5.5 Standardbrowser. Die
Scrollfunktionalität kann beim abgeschaltetem Javascript oder
einem anderen Browser wegfallen, es ist jedoch zwingend, dass
das Formular auch dann sicher submitted wird.

Mein Code:
----------
Formulardefinition:
<form name="formular" action="#blub" method="POST">

Auslösendes Image:
<INPUT onClick="document.formular.action = '#1001'; alert(document.formular.action); return true;" type="image" name="i1_dc_1001" src="/adac/images/plus_sign_light.gif" width="22" height="22" border="0">

Der alert ist Debugcode der aber nicht aufgerufen wird
im IE. Verschiebe ich ihn jedoch vor die Zuweisung an
document.formular.action, wird er angezeigt. Fehler
erzeugt das ganze in der Form jedoch nicht.

Anker:
<a class="anchor" name="1001">1001 </a>

Mit einem Anker der aus Buchstaben besteht, macht es auch
keinen Unterschied.

Das ganze befindet sich in einer 2fach verschachtelten
Tabelle. Das Formular befindet sich in der äusseren Tabelle,
die Submit Images in der inneren Tabelle.

Der Code ist nicht sonderlich valide im Bezug auf Attribute
und verschlüsselte Entities in URLs, weist jedoch keine
Verschachtelungsfehler auf. Einen Link kann ich nicht
bieten da es sich im Intranet befindet und die einzelne
Page hochladen kann ich nicht da die Daten nicht extern
zugänglich sind.

Völlig andere Lösungsansätze sind selbstverständlich auch
willkommen nur eben kein zweiter Request und lauffähig
mit IE 5.5 ohne negative Auswirkungen auf den Submit und
die Anzeige ohne diese Zusatzfunktionalität in anderen
Browsern.

Gruss Daniela

--
Nein, wir frieren unsere Hühner nicht auf Gletschern fest.
Selfcode: sh:) fo:) ch:) rl:) br:> n4:| ie:{ mo:) va:) de:] zu:} fl:( ss:) ls:&
  1. Hi Daniela,

    wenns nur im IE gehen soll kannst du mit document.all.Element.scrollIntoView("true"); arbeiten.

    Sprich du musst den namen des Ankers übergeben, per URL oder Serverseitig, jedenfalls musst du den namen dann in einer JS Variable haben. Dann einfach -> document.all[anchorname].scrollIntoView("true");

    Habs zwar nicht getestet, dürfte aber funktionieren.

    Gruß,
    ueps

    --
    Selfcode: ss:} zu:{ ls:& fo:) de:[ va:| ch:| n4:( rl:( br:] js:} ie:} fl:(
    1. Hi Uepselon

      Sprich du musst den namen des Ankers übergeben, per URL oder Serverseitig, jedenfalls musst du den namen dann in einer JS Variable haben. Dann einfach -> document.all[anchorname].scrollIntoView("true");

      Habs zwar nicht getestet, dürfte aber funktionieren.

      Tuts auch, vielen Dank. Das All-Objekt hab ich mir zwar angeschaut, aber wohl zuwenig genau. Hoffentlich läuft das ganze auch noch, wenn IE6 eingeführt wird, oder wenigstens
      meine Version.

      Die Anchornamen sind aus dem Namen des Submit-Images bekannt
      und diesen Namen kann ich serverseitig abfragen und das
      Javascript generieren.

      Achja, kleine Syntaxänderung falls es mal jemandem hilft
      der im Archiv sucht:
      document.all["anchorname"].scrollIntoView();

      Gruss und Danke

      Daniela

      --
      Nein, wir frieren unsere Hühner nicht auf Gletschern fest.
      Selfcode: sh:) fo:) ch:) rl:) br:> n4:| ie:{ mo:) va:) de:] zu:} fl:( ss:) ls:&
      1. Hi,

        freut mich das ich dir helfen konnte, wo du doch immer behauptest Wirtschaftsinformatiker könnten nix ;-)

        Gruß,
        ueps

        --
        Selfcode: ss:} zu:{ ls:& fo:) de:[ va:| ch:| n4:( rl:( br:] js:} ie:} fl:(