Wie löse ich ein onSubmit Event per Methode "submit()" aus?
Mounir Benzid
- javascript
Was ich eigentlich vorhabe ist so simpel, und trotzdem sitze ich schon
seit zwei Tagen dran. Und das nur weil Netscape einfach nichts mit der
Änderung der target Eigenschaft eines Formulars anfangen kann.
Es folgt eine Beispiel aus selfhtml und anschließend, daß was nur im ie5
funzt. Bitte helft mir bei einer Lösung für den nn4.x !!!!
Änderung/Setzen der target Eigenschaft eines Formulars laut S. Münz:
---------------------------------------------
<script language="JavaScript">
function Ziel()
{
document.Testform.target = "unten";
return true;
}
</script>
<form name="Testform" action="/cgi-bin/testform.pl"
onSubmit="return Ziel()">
<input type=text size=40 name="Eingabe">
<input type=submit value="Absenden">
</form>
---------------------------------------------
Ich brauche aber *unbedingt* folgendes:
<script language="JavaScript">
function Ziel(f)
{
var rememberTarget = f.target;
f.target = "unten";
f.submit();
f.target = rememberTarget;
return true;
}
</script>
<form name="Testform" action="/cgi-bin/testform.pl" target="default">
<input type=text size=40 name="Eingabe">
<a href javascript:Ziel(this.form)>Absenden</a>
</form>
---------------------------------------------
M.a.W : Target des Formulars merken --> dann ändern --> Ergebnis im
neuen Ziel anzeigen --> Formular target wieder auf default setzten
im ie5 no problem. Im nn4.7 wird das Ergebnis trotzdem wieder im "default"-Frame dargestellt.
Mounir sacht Danke!
Sorry , ich hab mich im Subject vertan.
Es geht eigentlich um das Verbiegen der target Eigenschaft eines Formulars.
Mo
<script language="JavaScript">
function Ziel(f)
{
var rememberTarget = f.target;
f.target = "unten";
f.submit();
f.target = rememberTarget;
return true;
lass das mal weg. (Bei mir steht bei sowas hinterher immer true im Fenster)
}
</script><form name="Testform" action="/cgi-bin/testform.pl" target="default">
<input type=text size=40 name="Eingabe">
<a href javascript:Ziel(this.form)>Absenden</a>
<a href="javascript:Ziel(document.Testform);">Absenden</a>
Der Netscape scheint hier einen anderen Kontext für "this" zu haben, das Formular ist es
jedenfalls nicht mehr.
</form>
ob das mit dem Target-verbiegen dann klappt weiss ich nicht. Aber der Funktionsaufruf
funktioniert so schon mal.
Gruss,
Carsten
lass das mal weg. (Bei mir steht bei sowas hinterher immer true im Fenster)
Ich hab's raus gelassen...
Der Netscape scheint hier einen anderen Kontext für "this" zu haben, das Formular ist es
jedenfalls nicht mehr.
und document.Testform in die function reingeschrieben,
damit unterwegs wirklich nichts verloren geht.
ob das mit dem Target-verbiegen dann klappt weiss ich nicht. Aber der Funktionsaufruf
funktioniert so schon mal.
Tja, das ist das eigentliche Problem. Ich hab in diesem Zusammenhang
irgenwo mal was von <a href="#"></a> onSubmit=".." gelesen. Ich glaub
sogar in Selfhtml. Eben im chat hatte das auch jemand gemeint .
Weist Du vielleicht wo?
yep tnx erstmal!
gr
mo
hi mo,
irgenwo mal was von <a href="#"></a> onSubmit=".." gelesen.
???
ich kenn bloß:
<a href="#" onClick="Ziel();">Absenden</a>
es soll Probleme mit Netscape geben, die das umgeht, ich weiss aber nicht so recht welche.
(Es würde auf jeden Fall auch verhindern, das der Rückgabewert von Ziel() hinterher im Fenster steht.)
Ausprobieren kann nicht schaden, aber obs hilft?
Gruss,
Carsten
ich kenn bloß:
<a href="#" onClick="Ziel();">Absenden</a>
Genau!!!!!!!!!!!!!!!!!!!!!!! Es geht JUBEL!!!!!!!!!!
Aaahhhhh! Endlich. Nach 4 Tagen endlich die Erlösung !
Carsten super :-)))))))))))))))))))))
Mich wundert aber, daß <a href="#"> überhaupt einen Sinn macht für den Browser!
Was passiert dabei?
Egal, ich kann jetzt erstmal ruhig pennen gehen!
gr
Mo
-------------------------------------------------------------------------------------------
Ach ja, wenn's Dich interessiert hier der html-code:
<html>
<head>
<title>Frame-Test</title>
<script LANGUAGE=javascript>
function wegDamit() {
var rememberTarget = document.test.target;
document.test.target = "rechts";
document.test.submit();
alert ("Target neu: " + document.test.target);
alert ("Target alt: " + rememberTarget);
document.test.target = rememberTarget;
}
</script>
</head>
<body>
<form name="test" action="/cgi-bin/test-cgi" target="links">
<input type=submit value="Klick per submit!">
<a href="#" onClick="wegDamit()">Ab geht's per Methode</a>
</form>
</body>
</html>
Hi Mounir,
Mich wundert aber, daß <a href="#"> überhaupt einen Sinn macht für den Browser!
Was passiert dabei?
Ich stell mir das immer so als html "this" vor, also als Verweis auf sich selber.
Das # bezeichnet ja normalerweise einen Anker innerhalb der Seite. Hier ist nun keine Seite
angegeben->also bleibts innerhalb der Seite, es ist auch kein Ziel angegeben->also ganz oben.
Übrigens klasse, dass du dein Ergebnis gepostet hast, da kommt für (Mit)Leser doch gleich viel
mehr 'Kompaktwissen' rüber.
Gruss,
Carsten
Moin Carsten!
Hmm ärger ärger!!!! Da gibt es wohl doch noch ein Problem!
Du erinnerst Dich vielleicht an die beiden alert-Fenster,
die ja nur zu Debug-Zwecken aufgerufen werden?
Laß die Fenster weg und schon funktioniert es nicht mehr :-(
Javascript == Javashit ehrlich.
Ich denke, daß man noch einen Timer (= wait()) einbauen muß,
um die Synchronisation zwischen Browser und Script zu erreichen!
Aber gibt so was wie ein wait() in js?
Mann o mann! Das kann doch nicht wahr sein, daß es nicht mehr klappt wenn
man die Fenster wegläßt!!!
Was meinst Du?
gr
Mo
Hi Mo,
Javascript == Javashit ehrlich.
volle Zustimmung.
Aber gibt so was wie ein wait() in js?
heisst setTimout(); und wartet nicht sondern führt Code Verzögert aus.
setTimeout("alert('oh Mann')",1000); // nach 1 sec oh Mann anzeigen
der Ausdruck innerhalb des setTimout(); wird erst nach dem Timout ausgewertet, das kann
Ärger geben (=> sonst wärs kein JS) wenn lokale Variable zu diesem Zeitpunkt nicht mehr gültig sind.
also
function warten(dauer)
{
w=1;
setTimeout("w=0;",dauer);
while(w)
;
}
Blockiert das Fenster natürlich total, aber zum Testen ob es das überhaupt ist, sollte es reichen.
Gruss,
Carsten
Blockiert das Fenster natürlich total, aber zum Testen ob es das überhaupt ist, sollte es reichen.
Komischerweise wird das Fenster überhaupt nicht blockiert.
Was jetzt nicht mehr klappt, ist das Zurücksetzen des targets auf
"links". Das heisst das Result wird auch per submit-Button _immer_
im rechten Frame gesetzt. Akuter Haarverlust droht!!!!
gr
Mo
-----------------------------------------------
<html>
<head>
<title>Frame-Test</title>
<script LANGUAGE=javascript1.2>
function warten(dauer) {
w=1;
setTimeout("w=0;",dauer);
while(w)
;
}
function wegDamit() {
var rememberTarget = document.test.target;
document.test.target = "rechts";
document.test.submit();
warten(1000);
// Zurücksetzen !!!!!
document.test.target = rememberTarget;
}
</script>
</head>
<body>
<form name="test" action="/cgi-bin/test-cgi" target="links">
<input type=submit value="Ab nach links!">
<a href="#" onClick="wegDamit()">Ab nach rechts!</a>
</form>
</body>
</html>
Hi mo,
Also bei mir wartete das warten ewig......
(einmal rechts, dann nie wieder links)
folgendes geht: (NN4.73)
<script LANGUAGE=javascript1.2>
var rememberTarget;
function wegDamit()
{
rememberTarget = document.test.target;
document.test.target = "rechts";
document.test.submit();
// Zurücksetzen
setTimeout("document.test.target = rememberTarget;",1000);
}
</script>
rememberTarget muss global sein, da die Funktion zum Zeitpunkt wo
"document.test.target = rememberTarget; evaluiert wird schon beendet ist.
Gefallen tut mir das mit dem Timeout nicht. (Geht das auch auf einem 486/100 ?)
Plan B: setz doch einfach das target im "Links" Fall auf links:
<input type=submit value="Ab nach links!" onClick="document.test.target ='links';">
Gruss,
Carsten
So, ich glaub, das ist jetzt das non-plus-ultra. Es funktioniert bei
5 von 8 Klicks auf den "Ab nach rechts!"-Button :-(
Carsten ich danke Dir sehr für Deine Zeit & Hilfe, aber das Problem
läßt sich anscheinend nicht mit vernünftigem Aufwand lösen.
Ich muß auf irgendeinen dirty hack zurückgreifen,
den man spätestens nach 3 Tagen selber nicht mehr versteht
Ja, da kommt richtig Freude auf!!!!
Vielleicht bis zum nächsten Mal!
gr
mo
----------------------------------------------------
<html>
<head>
<title>Frame-Test</title>
<script LANGUAGE=javascript1.2>
function warten(dauer) {
w=1;
setTimeout("w=0;",dauer);
while(w)
;
}
function wegDamit() {
document.test.target = "rechts";
document.test.submit();
}
</script>
</head>
<body>
<form name="test" action="/cgi-bin/test-cgi" target="links">
<input type=submit value="Ab nach links!" onClick="document.test.target ='links';">
<a href="#" onClick="wegDamit();warten(100000)">Ab nach rechts!</a>
</form>
</body>
</html>
Hi mo,
so _schnell_ wird nicht aufgegeben :)
hab jetzt nicht so viel zeit daher nur mal folgendes:
<html>
<head>
<title>Frame-Test</title>
<script LANGUAGE=javascript1.2>
function wegDamit(ziel)
{
document.test.target = ziel;
document.test.submit();
}
</script>
</head>
<body>
<form name="test" action="script.php3" target="links">
<input type=text value="papadappes" size=30 name="txt">
<input type=button value="Ab nach links" onClick="wegDamit('links');">
<a href="#" onClick="wegDamit('rechts')">Ab nach rechts!</a>
</form>
</body>
</html>
Erklärung was es sein könnte später..... mehr als 5 versuche hat es überlebt
Carsten
Hi Mounir,
das scheint jetzt zu laufen, mit IE5/98 NN4.72/98 NN4.01a/95 keine Probleme mehr, auch bei mehreren
zehn versuchen.
Vermute, mal das mein Vorschlag mit dem onClick im <submit> richtig schlecht war:
Was wird zuerst ausgeführt? Oder beides gleichzeitig? Oder mal das eine früher, mal
das andere? (diesen eindruck macht es zumindest)
Hoffentlich gehts auch bei dir,
frohes _weiter_coden,
Carsten