Übergabe Formularwert an Variable
Blinder
- javascript
Ích hab mich das ganze WE gespielt und sehe wahrscheinlich vor lauter Wald die Bäume nicht ...
Ich übergebe in der URL eine Nummer, möchte diese auslesen und über Links zu den Doks vorher und nachher verweisen. Mit der aktuellen Nummer soll über einen Include eine Datei eingefügt werden.
Da ich die url für andere Zwecke über js auslese hab ich mir gedacht, ich könnte einfach mit js weiter machen. Leider sind meine Kenntnisse in js ungenügend...
Schon mal Vielen Dank!
Here you go:
<title>Unbenanntes Dokument</title>
<script language="JavaScript">
<!--
function getFromSearch() {
var x = 0;
mySearch = location.search.substr(1).split("&");
for (x=0;x<=mySearch.length;x++) {
eval("document.forms.daten."+mySearch[x]);
}
}
// auslesen der url, funktioniert
function go(){
var aktuell = document.forms.daten.nummer.value;
//"Nummer" übergeben, um weiter zu rechnen
var prior = aktuell - 1;
var next = aktuell2 + 1;
document.writeln(document.forms.daten.nummer.value);
document.writeln("Die Nummern: " + aktuell + " - " + prior + " - " + next);
} // Hier bekomme ich NaN, 0, undefiniert, je nach Spielart
//-->
</script>
</head>
<body onLoad="getFromSearch()">
<FORM NAME="daten">
<input name="nummer" size="5"><br>
<input name="zwei" size="99">
</FORM> // URL wird richtig interpretiert
<script type="text/javascript" language="JavaScript">
<!--
go()
//-->
</script>
<!-- Später soll hier mal stehen:
<!--#include virtual="insert.pl?nummer=299"-->
-->
</body>
</html>
Mahlzeit,
und was genau ist jetzt eigentlich Deine Frage? Irgendwie habe ich keine gefunden - ebensowenig wie eine eindeutige und zielführende Fehlerbeschreibung ...
Schon mal Vielen Dank!
Kein Problem, gern geschehen.
MfG,
EKKi
und was genau ist jetzt eigentlich Deine Frage? Irgendwie habe ich keine gefunden
Tschuldigung, hab ich wohl zu gut im Code versteckt.
»»document.writeln(document.forms.daten.nummer.value);
»»document.writeln("Die Nummern: " + aktuell + " - " + prior + " - " + next);
»»} // Hier bekomme ich NaN, 0, undefiniert, je nach Spielart
Beim anzeigen bekomme ich NaN, 0 oder undefiniert und bin deshalb nicht in der Lage mit diesen Variablen weiter zu arbeiten. Was mache ich falsch?
Hallo,
»»document.writeln(document.forms.daten.nummer.value);
»»document.writeln("Die Nummern: " + aktuell + " - " + prior + " - " + next);
»»} // Hier bekomme ich NaN, 0, undefiniert, je nach Spielart
du könntest mal nachsehen, was von deinem Dokument übrigbleibt, wenn du vor jeder document.write-Anweisung einfügst:
alert(document.body.innerHTML)
Gruß plan_B
Mahlzeit,
<script language="JavaScript">
Es fehlt <http://de.selfhtml.org/html/referenz/attribute.htm#script@title=das zwingend erforderliche "type"-Attribut>.
<!--
Auskommentierung von Javascript mittels HTML-Kommentaren ist lediglich für vorsintflutliche Browser des letzten Jahrtausends nötig.
eval("document.forms.daten."+mySearch[x]);
"Eval is evil!" - und so gut wie NIEMALS notwendig. Auch in diesem Fall nicht. Was soll dieses Stückchen Code Deiner Meinung nach überhaupt bewirken?
var aktuell = document.forms.daten.nummer.value;
//"Nummer" übergeben, um weiter zu rechnen
1. Halte ich diese Art des Zugriffs für ungünstig: ich würde eher "document.http://de.selfhtml.org/javascript/objekte/forms.htm@title=forms['daten'].http://de.selfhtml.org/javascript/objekte/elements.htm@title=elements['nummer']" empfehlen - so lässt sich der Code später auch recht einfach mehrfach verwenden.
2. Bist Du Dir sicher, dass der zurückgegebene Wert stets numerisch ist - da Du ja mit ihm rechnen willst?
document.writeln("Die Nummern: " + aktuell + " - " + prior + " - " + next);
} // Hier bekomme ich NaN, 0, undefiniert, je nach Spielart
Wo "hier"? Bei welcher der 3 Variablen? Vielleicht solltest Du sie Dir mal einzeln ausgeben lassen - und sinnvollerweise per alert() ...
MfG,
EKKi
Wo "hier"? Bei welcher der 3 Variablen? Vielleicht solltest Du sie Dir mal einzeln ausgeben lassen - und sinnvollerweise per alert() ...
Mahlzeit EKKi!
Selbst bei
var aktuell = document.forms['daten'].elements['nummer']
gibt
document.writeln("Die Nummern: " + aktuell + " - " + prior + " - " + next);
folgendes zurück:
Die Nummern: [object] - 111 - NaN - 112
Deshalb stellt sich die Frage nach numerisch oder nicht (noch) gar nicht - die Übergabe auf aktuell klappt nicht - oder bin ich auf dem Holzweg??
Mahlzeit,
Selbst bei
var aktuell = document.forms['daten'].elements['nummer']
gibtdocument.writeln("Die Nummern: " + aktuell + " - " + prior + " - " + next);
folgendes zurück:
Die Nummern: [object] - 111 - NaN - 112
Natürlich. Du weist der Variablen "aktuell" ein Objekt zu. Kaum macht man's richtig, funktionierts auch:
var aktuell = Number(document.forms['daten'].elements['nummer'].value);
if (!isNaN(aktuell)) {
// weitere Verarbeitung ...
}
Deshalb stellt sich die Frage nach numerisch oder nicht (noch) gar nicht - die Übergabe auf aktuell klappt nicht - oder bin ich auf dem Holzweg??
Ja. :-)
MfG,
EKKi
ok, dass ich auf dem Holzweg bin hätte ich mir auch selbst beantworten können ;-))
Leider klappt der Rest immer noch nicht ganz...
aktuell ist jetzt zwar numerisch und das rechnen funktioniert, aber die Übergabe...
Beim Aufruf übergebe ich über die url einige werte:
test.htm?nummer.value='299'&zwei.value='hugo'
Deshalb würde ich erwarten, dass
aktuell=299 und damit
var prior = aktuell - 1
die Zahl 298 ergibt.
Leider gibt
document.writeln("Die Nummern: " + aktuell + " - " + prior + " - " + next);
immer noch zurück:
Die Nummern: 0 - -1 - 112
Ich weiss, ich bin auf dem Holzweg - aber kannst Du mir runter helfen?
Merci
Blinder
Mahlzeit,
Beim Aufruf übergebe ich über die url einige werte:
test.htm?nummer.value='299'&zwei.value='hugo'
Was haben hier die (einfachen) Anführungszeichen zu suchen? Und wieso benennst Du URL-Parameter mit Punkten drin? ... Ich ahne Grausliges: das hat mit Deiner unsäglichen Verwendung von "eval()" zu tun? Weißt Du eigentlich, was für riesige Scheunentore Du Dir damit aufreißt?
Nochmal zum Mitschreiben: "eval() is evil!" - es gibt nahezu NIEMALS die Notwendigkeit, es zu benutzen ... und auch in Deinem Fall nicht. Wirklich nicht. Glaub mir.
MfG,
EKKi
Ich glaubs Dir Ekki!
"eval() is evil!"
Und ich merk es mir auch!
Aber jetzt nervt mich ein Problem ganz böse.
Und einfach die Basics umzuschmeissen hilft mir jetzt (leider) nicht weiter. Auf diese Funktion setzen noch andere Prozeduren auf. Deshalb muss ich mit der klarkommen.
Die Frage ist: wie?
Mahlzeit,
Aber jetzt nervt mich ein Problem ganz böse.
Und einfach die Basics umzuschmeissen hilft mir jetzt (leider) nicht weiter. Auf diese Funktion setzen noch andere Prozeduren auf. Deshalb muss ich mit der klarkommen.
Die Frage ist: wie?
Nein, die Frage ist: was? Um genau zu sein: was willst Du überhaupt? (Und zwar nicht anhand von Code, sondern rein logisch-algorithmisch)
Du willst die einzelnen Formularelemente in einem HTML-Formular mit Werten vorbelegen. Die Werte für die Vorbelegung möchtest Du per GET-Parameter übergeben. Dir steht zur Auswertung keine serverseitige Skriptsprache (wie PHP, Perl oder ASP) zur Verfügung, sondern lediglich clientseitiges Javascript.
Sind diese Prämissen richtig?
Dann ist es doch kein Problem, die Werte einfach als name-value-Pärchen an den Querystring anzuhängen, ihn per Javascript zu zerlegen und den Wert jeweils in ein Formularelement zu schreiben, wenn es vorhanden ist.
<script type="text/javascript">
[code lang=javascript]
function getFromSearch(form_name) { // Namen des Formulars angeben
var form_obj = document.forms[form_name];
if (form_obj) { // Wenn ein Formular dieses Namens existiert
var query_string = location.search.substr(1).split('&'); // Querystring in Array zerlegen
for (var i = 0; i <= query_string.length; i++) { // Für jedes name-value-Pärchen
var key_value = query_string[i].split('='); // Pärchen in Name und Wert zerlegen
var elem_obj = form_obj.elements[key_value[0]];
if (elem_obj) { // Wenn das entsprechende Element existiert
elem_obj.value = key_value[1]; // Wert des Elements setzen
}
}
}
}
</script>[/code]
MfG,
EKKi
Zuerst einmal vielen, vielen Dank für die Mühe, die Du Dir mit mir gibst.
Aber ich glaub, ich packs nicht...
Ich denke, Deine Prämissen sind im Prinzip richtig. Ich bekomme üer eine url einen string, mit dem ich ein Formular vorbelege. Die entsprechenden Wertepaare lese ich aus (es sind mehr als in dem Beispiel) und verarbeite sie mit js weiter (Übergabe an ein neues Fenster (deshalb das Formular, das normal hidden ist), etc.)
Nun möchte ich einen Parameter "nummer" einfach eins kleiner und eins größer machen. Ich dachte, Variablen sind dazu da...
Ich wollte dann, mit js einen link zu einer Seite vorher und einer Seite danach in diese Page einfügen sowie ein include generieren.
Prinzipiell stehen auch alle anderen, serverseitigen Sprachen, zur Verfügung. Aber ich dachte, wenn ichs schon in js habe...
und jetzt der Hammer:
Ich schaffe es, trotz Deiner Hilfe, immer noch nicht.
Ich steck offensichtlich so tief drin...
Here is what I did:
function ekki(form_name) { // Namen des Formulars angeben
var form_obj = document.forms[form_name];
if (form_obj) { // Wenn ein Formular dieses Namens existiert
var query_string = location.search.substr(1).split('&'); // Querystring in Array zerlegen
for (var i = 0; i <= query_string.length; i++) { // Für jedes name-value-Pärchen
var key_value = query_string[i].split('='); // Pärchen in Name und Wert zerlegen
var elem_obj = form_obj.elements[key_value[0]];
if (elem_obj) { // Wenn das entsprechende Element existiert
elem_obj.value = key_value[1]; // Wert des Elements setzen
}
}
}
}
function go()
{
var aktuell = Number(document.forms['daten'].elements['nummer'].value);
var prior = aktuell - 1;
var next = aktuell + 1;
document.write("Aktuell: " + aktuell + "<br>")
document.write(Number(document.forms['daten'].elements['nummer'].value));
}
//-->
</script>
</head>
<body onLoad="ekki(daten)">
<FORM NAME="daten">
<input name="nummer" size="5"><br>
<input name="zwei" size="99">
</FORM>
<script type="text/javascript" language="JavaScript">
<!--
go();
//-->
</script>
Aufruf des Forulares mit
test1.htm?nummer.value='259'&zwei.value='hugo'
Ergebnis:
Keine Vorbelegung des Formulares,
document.write ergibt 0
Mahlzeit,
Nun möchte ich einen Parameter "nummer" einfach eins kleiner und eins größer machen. Ich dachte, Variablen sind dazu da...
Normalerweise sind sie das ja auch ... aber das ist jetzt erstmal die Kür. Pflicht ist, dass die Vorbelegung der Formularelemente mit Werten problemlos klappt. Lass einfach mal Deine merkwürdige Funktion "go()" weg (kommentiere sie aus oder schmeiß sie ganz raus) - tut es wenigstens dann? Wobei ich sowieso nicht verstehe, wieso Du die eine Funktion erst nach dem Laden der Seite (per "onload") und die andere einfach zwischendrin aufrufst ...
Ich wollte dann, mit js einen link zu einer Seite vorher und einer Seite danach in diese Page einfügen sowie ein include generieren.
Ja, das habe ich schon verstanden. Aber Du weißt offenbar überhaupt nicht, was Du tust - insofern ist es äußerst ungünstig, an drölf Baustellen gleichzeitig zu arbeiten ... mach einen Schritt nach dem anderen.
Prinzipiell stehen auch alle anderen, serverseitigen Sprachen, zur Verfügung. Aber ich dachte, wenn ichs schon in js habe...
Javascript ist immer die schlechteste Wahl. Javascript eignet sich meiner Meinung nach lediglich dafür, dem Benutzer in irgendeiner Form die Eingabe von Werten oder die Funktionalität der Seite zu erleichtern ... für Datenverarbeitung, Validitätsprüfung usw. ist Code, der im Browser abläuft, absolut ungeeignet, weil unkontrollierbar.
Ergebnis:
Keine Vorbelegung des Formulares,
document.write ergibt 0
Was sagt die Fehlerkonsole?
MfG,
EKKi
Abend,
Normalerweise sind sie das ja auch ... aber das ist jetzt erstmal die Kür. Pflicht ist, dass die Vorbelegung der Formularelemente mit Werten problemlos klappt. Lass einfach mal Deine merkwürdige Funktion "go()" weg (kommentiere sie aus oder schmeiß sie ganz raus) - tut es wenigstens dann? Wobei ich sowieso nicht verstehe, wieso Du die eine Funktion erst nach dem Laden der Seite (per "onload") und die andere einfach zwischendrin aufrufst ...
go() war eigentlich nur als Anzeigemodul gedacht - um zu überprüfen, ob die Übergabe funktioniert. Tut ja eigentlich selber nix wesentliches.
War davon ausgegangen, dass ich "nur" die aus meiner Funktion getFromSearch() definierten Element an eine Variable übergeben muss...
Deshalb die Testseite, mit der ich einfach die Vorbelegung (mit dem kleienn Formular) und die Übergabe (mit go()) proben wollte.
Die Vorbelegung der Formularelemente klappt mit meinem "alten" getFromSearch() ohne Probleme.
Nur bei Verwendung der neune Funktion ekki(form_name), sorry :-((, funktioniert die Vorbelegung nicht. Da hilft auch das rausschmeissen von go() leider nicht.
Der Aufruf mit "onload=" ist auch eigentlich auch nur weils schon immer so war... und es für die früheren Zwecke auch tat.
Ich bin echt ratlos und für jeden Tip dankbar!
CU, Blinder
Mahlzeit,
Die Vorbelegung der Formularelemente klappt mit meinem "alten" getFromSearch() ohne Probleme.
Mag sein. Aber das Verwenden von "eval()" ist in höchstem Maße überflüssig und unsicher.
Nur bei Verwendung der neune Funktion ekki(form_name), sorry :-((, funktioniert die Vorbelegung nicht.
"Funktioniert ... nicht" ist keine hilfreiche und zielführende Fehlermeldung. Nochmal die Frage: was sagt die Javscript-Fehlerkonsole?
MfG,
EKKi
EKKi,
einen hätte ich noch...
Mit Deinem Hinweis, Du würdest alles andere, nur nicht js, nehmen, hast Du mich nachdenklich gemacht.
Kannst Du mir (kurz) eine Vorstellung vermittel, wie das in php aussehen würde? Grundkenntinsse (aber auch nicht mehr) kannst Du dabei voraussetzen.
Merci
CU, Blinder
Mahlzeit,
Kannst Du mir (kurz) eine Vorstellung vermittel, wie das in php aussehen würde? Grundkenntinsse (aber auch nicht mehr) kannst Du dabei voraussetzen.
Mittels $_GET kannst Du auf die per URL übergebenen Parameter zugreifen. Dann brauchst Du, nachdem Du die dort enthaltenen Werte auf Gültigkeit überprüft hast (EVA-Prinzip), in der Ausgabe im Prinzip nur folgendes zu schreiben:
<input type="text" name="foo" value="<?php[code lang=php] echo htmlspecialchars($_GET['foo']);
?>">[/code]
MfG,
EKKi
EKKi,
jetzt hätte ich eingesehen, dass php die bessere und elegantere Lösung wäre ...
... aber...
CU, Blinder
Hallo,
go() war eigentlich nur als Anzeigemodul gedacht - um zu überprüfen, ob die Übergabe funktioniert. Tut ja eigentlich selber nix wesentliches.
in meiner 1. Antwort hatte ich auch nicht richtig erkannt, in welcher Reihenfolge die Funktionen abgearbeitet werden. Dir scheint es jetzt aber immer noch nicht klar zu sein. "go()" wird noch vor dem onload-Event aufgerufen, deswegen blieben die URL-Parameter auch unberücksichtigt.
Die Vorbelegung der Formularelemente klappt mit meinem "alten" getFromSearch() ohne Probleme.
Nur bei Verwendung der neune Funktion ekki(form_name), sorry :-((, funktioniert die Vorbelegung nicht.
Ekkis Variante ist doch nicht schwierig zu überblicken. Hast du nicht berücksichtigt, dass jetzt ein anderer Link nötig ist?
z.B.: test1.htm?nummer=259&zwei=hugo
Gruß plan_B
in meiner 1. Antwort hatte ich auch nicht richtig erkannt, in welcher Reihenfolge die Funktionen abgearbeitet werden. Dir scheint es jetzt aber immer noch nicht klar zu sein. "go()" wird noch vor dem onload-Event aufgerufen, deswegen blieben die URL-Parameter auch unberücksichtigt.
Gut, dass Du es jetzt erkannt hast. Und: Du hattest recht, es war mir nicht klar, dass go() erst _nach_ dem onload ausgeführt wird.
In der richtigen Reihenfolge klappt alles wunderbar.
Vielen Dank für den Hinweis, Du hast meine Kopfschmerzen deutlich weniger werden lassen!
@EKKi
Auch Dir vielen Dank für Deine Mühe mit einem Banausen wie mir.
Ich verspreche, ich werde Deine Ratschläge künftig berücksichtigen. Bin schon dabei eval wo immer es geht rauszuschmeissen und Deine Version einzusetzen!
Nochmals Danke für Deine Zeit, aber manchmal ist das Brett vorm Kopf einfach zu gross und man braucht Hilfe von draussen.
Merci vielmals!
Blinder