Formular abschicken und an eine Stelle im Dokument springen
Daniela Koller
- javascript
0 uepselon
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
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
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
Hi,
freut mich das ich dir helfen konnte, wo du doch immer behauptest Wirtschaftsinformatiker könnten nix ;-)
Gruß,
ueps