globale Variable ändern und an function übergeben
Henning
- javascript
Hallo,
ich hoffe das Thema ist nicht zu verwirrend.´
Ich habe auf einer Seite mehrere Checkboxes und ändere mit einer function (OEMcheck) beim verlasse (klicken auf link) die variablen, je nachdem ob die zugehörige Checkbox markiert ist oder nicht.
In einer zweiten function (gleiche script datei) soll der Wert der Variablen auf der neuen Seite überprüft werden und beim verlassen (klicken auf link) eine Ausgabe erfolgen:
var OEM1="";
var OEM2="";
var OEM3="";
var OEM4="";
var OEM5="";
var OEM6="";
function OEMcheck () {
if (document.box.OEM[0].checked==true) {OEM1=true}
else {OEM1=false};
if (document.box.OEM[1].checked==true) {OEM2=true}
else {OEM2=false};
if (document.box.OEM[2].checked==true) {OEM3=true}
else {OEM3=false};
if (document.box.OEM[3].checked==true) {OEM4=true}
else {OEM4=false};
if (document.box.OEM[4].checked==true) {OEM5=true}
else {OEM5=false};
if (document.box.OEM[5].checked==true) {OEM6=true}
else {OEM6=false};
};
function OEMLink () {
Ergebnis=window.open("","Testseite","");
Ergebnis.document.write("<html><head><title>Testseite</title>\n");
Ergebnis.document.write("</head><body>\n");
if (OEM1==true) {
Ergebnis.document.write("OEM1<br>\n");}
else {
Ergebnis.document.write("OEM1 nicht<br>\n")};
if (OEM2==true) {
Ergebnis.document.write("OEM2<br>\n");}
else {
Ergebnis.document.write("OEM2 nicht<br>\n")};
if (OEM3==true) {
Ergebnis.document.write("OEM3<br>\n");}
else {
Ergebnis.document.write("OEM3 nicht<br>\n")};
if (OEM4==true) {
Ergebnis.document.write("OEM4<br>\n");}
else {
Ergebnis.document.write("OEM4 nicht<br>\n")};
if (OEM5==true) {
Ergebnis.document.write("OEM5<br>\n");}
else {
Ergebnis.document.write("OEM5 nicht<br>\n")};
if (OEM6==true) {
Ergebnis.document.write("OEM6<br>\n");}
else {
Ergebnis.document.write("OEM6 nicht<br>\n")};
Ergebnis.document.write("</body></html>\n");
Ergebnis.document.close();
};
Dummerweise wird der Wert der Variablen wohl nicht gespeichert. Weswegen er mir immer den else Fall ausgibt. Ist das ganze über eine äußere Hauptfunktion realisierbar innerhalb welcher die beiden anderen Funktionen sitzen oder muss da ein ganz anderer Ansatz angewandt werden?
Gruß
Henning
var OEM1="";
var OEM2="";
var OEM3="";
var OEM4="";
var OEM5="";
var OEM6="";
Wenn deine Variabeln wirklich so heißen, dann schreit das nach einem Array.
function OEMcheck () {
if (document.box.OEM[0].checked==true) {OEM1=true}
else {OEM1=false};
if (document.box.OEM[1].checked==true) {OEM2=true}
else {OEM2=false};
if (document.box.OEM[2].checked==true) {OEM3=true}
else {OEM3=false};
if (document.box.OEM[3].checked==true) {OEM4=true}
else {OEM4=false};
if (document.box.OEM[4].checked==true) {OEM5=true}
else {OEM5=false};
if (document.box.OEM[5].checked==true) {OEM6=true}
else {OEM6=false};
};
Dann könntest du diese Funktion auch extrem verkürzen und flexibler machen.
Dummerweise wird der Wert der Variablen wohl nicht gespeichert. Weswegen er mir immer den else Fall ausgibt. Ist das ganze über eine äußere Hauptfunktion realisierbar innerhalb welcher die beiden anderen Funktionen sitzen oder muss da ein ganz anderer Ansatz angewandt werden?
Ein anderer Ansatz. Wobei mir nicht ganz klar ist was du vorhast. Wenn es nur darum geht, die Daten von einer HTML Seite auf die nächste zu übertragen, gibt es mehrere Möglichkeiten. s. dieser selfhtml Artikel
Struppi.
Ich glaube ich weis ungefähr was du meinst, werde das mal versuchen :)
So? Funktionieren tut es:
var OEM = new Array(6);
function OEMcheck () {
for (var i = 0; i <= OEM.length; i++)
{
if (document.box.OEM[i].checked==true) {OEM[i]=true}
else {OEM[i]=false};
Ergebnis=window.open("","Testseite","");
Ergebnis.document.write("<html><head><title>Testseite</title>\n");
Ergebnis.document.write("</head><body>\n");
if (OEM[i]==true) {
Ergebnis.document.write("<p>Test bestanden</p>\n");
}
else {
Ergebnis.document.write("<p>Test nicht bestanden</p>\n")
};
Ergebnis.document.write("</body></html>\n");
};
Ergebnis.document.close();
};
Hi,
if (document.box.OEM[i].checked==true) {OEM[i]=true}
else {OEM[i]=false};
wenn der Wert der checked-Eigenschaft nicht true ist, dann lautet er wie? Vergleiche Deine Erkenntnis mit dem, was Du in Dein Array speichern willst und überlege Dir, ob Deine Abfrage überhaupt nötig ist.
Ergebnis=window.open("","Testseite","");
"" ist übrigens eine relative URL, die, wenn man sie mit ihrer Basis (nämlich der URL der aktuellen Seite) zusammenführt, der URL der aktuellen Seite entspricht. Warum willst Du das, was der Nutzer gerade vor sich hat, noch mal in einem Popup öffnen, um es ...
Ergebnis.document.write("<html><head><title>Testseite</title>\n");
... anschließend sofort wieder zu überschreiben?
Ein leeres Dokument hat die URL about:blank.
if (OEM[i]==true) {
"true==true" wird in Boole'scher Algebra zu "true" aufgelöst "false==true" zu "false". Dieses "true" oder "false" entspricht exakt dem Wert, den OEM[i] innehat. Warum versuchst Du etwas umständlich zu berechnen, was Du bereits hast?
Ergebnis.document.close();
Das zugehörige open() hast Du übrigens unterschlagen.
Cheatah
Hi,
if (document.box.OEM[i].checked==true) {OEM[i]=true}
else {OEM[i]=false};wenn der Wert der checked-Eigenschaft nicht true ist, dann lautet er wie? Vergleiche Deine Erkenntnis mit dem, was Du in Dein Array speichern willst und überlege Dir, ob Deine Abfrage überhaupt nötig ist.
Die Checkbox existiert nur auf einer Seite und ich dachte, dass ich die variablen auf die nächste Seite mitnehmen kann (was sich mittlerweile als falsch herausgestellt hat).
Ergebnis=window.open("","Testseite","");
"" ist übrigens eine relative URL, die, wenn man sie mit ihrer Basis (nämlich der URL der aktuellen Seite) zusammenführt, der URL der aktuellen Seite entspricht. Warum willst Du das, was der Nutzer gerade vor sich hat, noch mal in einem Popup öffnen, um es ...
Ergebnis.document.write("<html><head><title>Testseite</title>\n");
... anschließend sofort wieder zu überschreiben?
Ein leeres Dokument hat die URL about:blank.
if (OEM[i]==true) {
"true==true" wird in Boole'scher Algebra zu "true" aufgelöst "false==true" zu "false". Dieses "true" oder "false" entspricht exakt dem Wert, den OEM[i] innehat. Warum versuchst Du etwas umständlich zu berechnen, was Du bereits hast?
Ergebnis.document.close();
Das zugehörige open() hast Du übrigens unterschlagen.
Cheatah
Ja... blutiger Anfänger... allerdings verstehe ich das true==true nicht ganz. Reicht es wenn ich if (OEM[i]) reinschreibe? Führt er das dann nur im Falle von true aus?
Hi,
if (document.box.OEM[i].checked==true) {OEM[i]=true}
else {OEM[i]=false};
wenn der Wert der checked-Eigenschaft nicht true ist, dann lautet er wie? Vergleiche Deine Erkenntnis mit dem, was Du in Dein Array speichern willst und überlege Dir, ob Deine Abfrage überhaupt nötig ist.
Die Checkbox existiert nur auf einer Seite und ich dachte, dass ich die variablen auf die nächste Seite mitnehmen kann (was sich mittlerweile als falsch herausgestellt hat).
darauf bezog ich mich nicht. Dein Code ist unnötig kompliziert.
Ja... blutiger Anfänger...
Da ist nichts Schlimmes dran, Blut kann man wegwischen. Die Flecken machen ein bisschen Mühe.
allerdings verstehe ich das true==true nicht ganz. Reicht es wenn ich if (OEM[i]) reinschreibe?
Siehstewoll, Du hast es doch verstanden ;-)
Cheatah
var OEM = new Array(6);
function OEMcheck () {
Ergebnis=window.open("about:blank","Testseite","");
Ergebnis.document.open();
Ergebnis.document.write("<html><head><title>Testseite</title>\n");
Ergebnis.document.write("</head><body>\n");
for (var i = 0; i <= OEM.length; i++)
{
if (document.box.OEM[i].checked==true){
Ergebnis.document.write("<p>Test bestanden</p>\n");
}
else {
Ergebnis.document.write("<p>Test nicht bestanden</p>\n")
};
Ergebnis.document.write("</body></html>\n");
};
Ergebnis.document.close();
};
Jetzt zufrieden?
Hi,
Jetzt zufrieden?
nur im Komparativ, nicht jedoch im Positiv. Es gibt noch Potenzial, das ich teilweise auch schon beschrieben habe. Findest Du es?
Cheatah
Im Moment nur das "true" im if... (hab ich übersehen). Mal schauen ob das Wochenende weitere Erleuchtung bringt.
Falls noch jemand mitliest...
Es geht darum, dass auf einer Startseite mehrere Checkboxen sind. Mit diesen soll man den Inhalt welcher auf einer späteren Seite angezeigt wird eingrenzen können.
1. Seite:
vier unterschiedliche Links zu nachfolgenden Seiten und mehrere Checkboxen
2. Seite
Links zu einem Unterthema. Sobald ein Link geklickt wird, soll ein Code eine Seite zusammenstellen, welche den Inhalt des Unterthemas mit der Restriktion der angewählten Checkboxen anzeigt.
Dies wollte ich über eine Suchfunktion (Datenbank) und zwei Variablen realisieren. Die erste stellt den Ihnalt des Unterthemas dar, die zweite die Checkboxes...
Im Moment schaffe ich es aber nicht, die übergebenen Daten als Variable in die ´zweite Seite einzubringen. Textausgabe funktioniert, aber wie kann ich das als Variable ausgeben?
Wenn man den link von Struppi anschaut, dann etwas in der Richtung:
var eigenschaft = liste[eigenschaft]
Im Moment schaffe ich es aber nicht, die übergebenen Daten als Variable in die ´zweite Seite einzubringen. Textausgabe funktioniert, aber wie kann ich das als Variable ausgeben?
was meinst du mit "als Variabel ausgeben"
Wenn man den link von Struppi anschaut, dann etwas in der Richtung:
var eigenschaft = liste[eigenschaft]
In dem Artikel werden mehrere Möglichkeiten beschrieben, wie du Werte über mehrere Seiten mit JS übergeben kannst. Das was du da zeigst ist einfach die Zuweisung einer Variabel mit einer Eigenshcaft eines Objektest, wobei der Name der Eigenschaft in einer Variabel steckt. Das hat aber nichts mit deiner frage zu tun.
Struppi.
Ja, dumm formuliert und die Hälfte vergessen.
Ich würde gerne die Methode mit window.name einsetzen.
var eigenschaft = liste[eigenschaft]
Erklärung:
eigenschaft soll der erste übergebene Wert sein und nicht ein festgelegter Variablenname. liste[eigenschaft] soll dann der dazugehörige Wert sein. Das ganze müsste dann für alle übergebenen Werte gemacht werden.
Mir ist aber eingefallen, dass ich evtl. eine einfachere Lösung habe. Ich füttere meine Suchfunktion einfach mit den Werten und lass die dann die Seite ausgeben.
Müsste einfacher zu realisieren sein...
Ja, dumm formuliert und die Hälfte vergessen.
Ich würde gerne die Methode mit window.name einsetzen.
Du meinst die mit storage.js?
var eigenschaft = liste[eigenschaft]
Erklärung:
eigenschaft soll der erste übergebene Wert sein und nicht ein festgelegter Variablenname. liste[eigenschaft] soll dann der dazugehörige Wert sein. Das ganze müsste dann für alle übergebenen Werte gemacht werden.
Evtl. übersiehst du, dass der Indexoperator in JS nicht nur für Arrays verwendet wird, sondern auch für den Zugriff auf Objekteigenschaften. Genau das wird in dem Beispiel gemacht, d.h. es gibt keine Reihenfolge, sondern du musst jede Eigenschaft mit einem Namen speichern.
Mir ist aber eingefallen, dass ich evtl. eine einfachere Lösung habe. Ich füttere meine Suchfunktion einfach mit den Werten und lass die dann die Seite ausgeben.
Müsste einfacher zu realisieren sein...
Du meinst hast sowieso eine serverseitge Anwendung?
Dann ist das rumgemurkse mit JS nicht nötig, stimmt.
Struppi.
Genau die mit storage.js
Eventuell übersiehst du, dass der Indexoperator in JS nicht nur für die Arrays verwendet wird, sondern auch für den Zugriff auf Objekteigenschaften. Genau das wird in dem Beispiel gemacht, d.h. es gibt keine Reihenfolge, sondern du musst jede Eigenschaft mit einem Namen speichern.
Ich bin mir nicht sicher ob ich dich richtig verstehe, aber jede "Eigenschaft" hat bei mir einen anderen Namen. Abgespeichert ist also
OEM1; false
OEM2; true
OEM3; false
usw.
Ich wollte also Variablen deklarieren:
for (var eigenschaft in liste) {
var eigenschaft = liste[eigenschaft]
}
->
var OEM1 = false;
var OEM2 = true;
usw.
Damit dann eine function füttern:
if (OEM1) { Suchfunktion (Unterthema UND Restriktion2)
Ergebnis in Seite
if (OEM2) { Suchfunktion (Unterthema UND Restriktion2)
Ergebnis zur Seite dazu
...
}
Bekomme das aber nicht hin, deswegen versuche ich es jetzt anders.
Die Suchfunktion ist JS basiert und greift auf eine Datenbak zu. Ich will jetzt der Suchfunktion sagen: "suche Unterthema UND Restriktion1 und füge die links in eine Seite ein, danach suche Unterthema UND Restriktion2 usw.
Ich muss also nur noch die Begriffe aus der Übermittlung in die Suchfunktion bekommen...
Gruß
Henning (glaube so langsam, dass mein Chef das mit den Checkboxen etc. vergessen kann...)
for (var eigenschaft in liste) {
var eigenschaft = liste[eigenschaft]
}
Du willst hier keine Variable namens eigenschaft anlegen (die benutzt du ja schon in der Schleife), sondern eine Variable mit einem Namen, der in der String-Variable eigenschaft steht! Das kannst du so selbstverständlich nicht notieren. Was ginge:
window[eigenschaft] = liste[eigenschaft];
Das legt gleichnamige globale Variablen an - globale Variablen sind Eigenschaften vom globalen Objekt window.
Aber welchen Sinn sollte es haben, all diese schön in liste geordneten Variablen wieder zu losen globalen Variablen zu machen?
liste ist ein Objekt, dessen Eigenschaften du einfach über liste.eigenschaft abrufen kannst.
Damit dann eine function füttern:
if (OEM1) { Suchfunktion (Unterthema UND Restriktion2)
Ergebnis in Seite
if (OEM2) { Suchfunktion (Unterthema UND Restriktion2)
Ergebnis zur Seite dazu
...
}
if (liste.OEM1) ...
if (liste.OEM2) ...
Bekomme das aber nicht hin, deswegen versuche ich es jetzt anders.
Ja, zum Beispiel so wie oben beschrieben.
Mathias
Hallo,
alle variablen gelten nur für eine einzige seite. du kannst sie nicht seitenübergreifend verwenden.
da müsstest du sie mit eine serverseitigen skriptsprache speichern ...
MfG. Christoph Ludwig
alle variablen gelten nur für eine einzige seite. du kannst sie nicht seitenübergreifend verwenden.
da müsstest du sie mit eine serverseitigen skriptsprache speichern ...
Auch dir sei der Artikel nahegelegt: http://aktuell.de.selfhtml.org/artikel/javascript/wertuebergabe/
Struppi.
Hallo,
Auch dir sei der Artikel nahegelegt: http://aktuell.de.selfhtml.org/artikel/javascript/wertuebergabe/
ich weis, nur so etwas bevorzuge ich nicht ;)
MfG. Christoph Ludwig
Auch dir sei der Artikel nahegelegt: http://aktuell.de.selfhtml.org/artikel/javascript/wertuebergabe/
ich weis, nur so etwas bevorzuge ich nicht ;)
Aha, deine vorherige Antwort klang etwas anders:
alle variablen gelten nur für eine einzige seite. du kannst sie nicht seitenübergreifend verwenden.
da müsstest du sie mit eine serverseitigen skriptsprache speichern ...
Struppi.
Hallo,
Aha, deine vorherige Antwort klang etwas anders:
alle variablen gelten nur für eine einzige seite. du kannst sie nicht seitenübergreifend verwenden.
da müsstest du sie mit eine serverseitigen skriptsprache speichern ...
du musst nur meine denkweise verstehen ^^
wenn ich etwas für sinnlos oder schlecht halte, dann empfehle ich es auch nicht :)
MfG. Christoph Ludwig