Was ist falsch?
Markus
- javascript
Hi Leute
Habe ein "Bezirk" und ein "Bundesland" Dropdown:
Wenn ein Bezirk ausgewählt ist soll das Bundesland an den ausgewählten Bezirk ausgewählt werden.
Funktioniert im moment so(aber umständlich):
var bezirk =document.Formular.Bezirk.selectedIndex;
function chkBezirk(bezirk)
{
var bezirk =document.Formular.Bezirk.selectedIndex;
if(document.Formular.Bezirk.length < 122) return true;
else
if(bezirk == 0) document.Formular.Bundesland.selectedIndex = 0;
if(bezirk == 12 || bezirk == 13 || bezirk == 26 || bezirk == 35 || bezirk == 55 || bezirk == 62 || bezirk == 63 || bezirk == 64 || bezirk == 70) document.Formular.Bundesland.selectedIndex = 1;
if(bezirk == 16 || bezirk == 29 || bezirk == 39 || bezirk == 40 || bezirk == 76 || bezirk == 79 || bezirk == 85 || bezirk == 86 || bezirk == 89 || bezirk == 119) document.Formular.Bundesland.selectedIndex = 2;
if(bezirk == 1 || bezirk == 3 || bezirk == 7 || bezirk == 19 || bezirk == 20 || bezirk == 30 || bezirk == 31 || bezirk == 42 || bezirk == 43 || bezirk == 50 || bezirk == 56 || bezirk == 57 || bezirk == 58 || bezirk == 61 || bezirk == 74 || bezirk == 78 || bezirk == 83 || bezirk == 90 || bezirk == 117 || bezirk == 118 || bezirk == 121) document.Formular.Bundesland.selectedIndex = 3;
if(bezirk == 5 || bezirk == 11 || bezirk == 17 || bezirk == 21 || bezirk == 24 || bezirk == 37 || bezirk == 51 || bezirk == 52 || bezirk == 53 || bezirk == 65 || bezirk == 68 || bezirk == 69 || bezirk == 73 || bezirk == 80 || bezirk == 81 || bezirk == 84 || bezirk == 87 || bezirk == 92 || bezirk == 93) document.Formular.Bundesland.selectedIndex = 4;
if(bezirk == 27 || bezirk == 71 || bezirk == 72 || bezirk == 77 || bezirk == 82 || bezirk == 120) document.Formular.Bundesland.selectedIndex = 5;
if(bezirk == 2 || bezirk == 8 || bezirk == 9 || bezirk == 14 || bezirk == 18 || bezirk == 22 || bezirk == 23 || bezirk == 25 || bezirk == 28 || bezirk == 36 || bezirk == 41 || bezirk == 46 || bezirk == 47 || bezirk == 49 || bezirk == 54 || bezirk == 59 || bezirk == 60 || bezirk == 66 || bezirk == 88 || bezirk == 91) document.Formular.Bundesland.selectedIndex = 6;
if(bezirk == 32 || bezirk == 33 || bezirk == 34 || bezirk == 38 || bezirk == 44 || bezirk == 45 || bezirk == 48 || bezirk == 67 || bezirk == 75) document.Formular.Bundesland.selectedIndex = 7;
if(bezirk == 4 || bezirk == 6 || bezirk == 10 || bezirk == 15) document.Formular.Bundesland.selectedIndex = 8;
if(bezirk == 94 || bezirk == 95 || bezirk == 96 || bezirk == 97 || bezirk == 98 || bezirk == 99 || bezirk == 100 || bezirk == 101 || bezirk == 102 || bezirk == 103 || bezirk == 104 || bezirk == 105 || bezirk == 106 || bezirk == 107 || bezirk == 108 || bezirk == 109 || bezirk == 110 || bezirk == 111 || bezirk == 112 || bezirk == 113 || bezirk == 114 || bezirk == 115 || bezirk == 116) document.Formular.Bundesland.selectedIndex = 9;
}
Soweit so gut nun habe ich von jemanden eine Variante bekommen wie es viel einfacher gehen sollte:
Vorhandene deffinitionen:
Bundesland = new Array();
Bundesland['Burgenland'] = new Array();
Bundesland.Burgenland[0] = "Eisenstadt-Stadt";
Bundesland.Burgenland[1] = "Eisenstadt-Umgebung";
Bundesland.Burgenland[2] = "Güssing";
[usw.....]
Bundesland['Kärnten'] = new Array();
Bundesland['Kärnten'][0] = "Feldkirchen";
Bundesland['Kärnten'][1] = "Hermagor";
Bundesland['Kärnten'][2] = "Klagenfurt-Land";
[usw... aus Plaztgründen nicht mehr]
so nun die Variante um es kürzer zu machen:
function chkBezirk(bezirk)
{
for(var b in Bundesland)
for(var i= 0; Bundesland[b][i];i++)
if(Bundesland[b][i] == bezirk)) return b;
}
es tut sich aber nix:
hab dann im Bezirk Dropdown bei onchange="chkBezirk()"...
Was mache ich falsch?
Was fehlt noch?
Oder wie würde eine andere Variante aussehen um die obige lange Wurst zu kürzen?
Danke
MFG
Markus
Hi Leute
Habe ein "Bezirk" und ein "Bundesland" Dropdown:
Wenn ein Bezirk ausgewählt ist soll das Bundesland an den ausgewählten Bezirk ausgewählt werden.
Ich schrieb es dir weiter unten.
Du hast einmal eine Funktion, die rausfindet, in welchem Bundesland die Bezirke liegen:
searchBezirk(bezirk)
(Deshalb heißt di eFkt. auch _search_ nicht chk)
Was du jetzt noch brauchst ist eine Funktion, die das Bundesland in dem Bundesland select feld sucht und dann entsprechend auswählt.
Und mittlerweile solltest du von alleine darauf kommen, wie man etwas sucht innnerhalb eines Arrays (das select Feld ist ein Array aus options).
Struppi.
Ich probiere schon eine ewigkeit damit herum bekomm aber nix brauchbares zustande - sorry ich weiß ist sicher eine Schande.. aber des programmieren ist halt nicht meines
vl so irgendwie..
function select()
{
for (return b in document.Formular.Bezirk.options[??].text)
document.Formular.Bezirk.options[??].text = selected.true
}
Ich weiß es echt nicht sorry*gg*
Ich würde dich bitten diese Funktion für mich zu erstellen..
Was du jetzt noch brauchst ist eine Funktion, die das Bundesland in dem Bundesland select feld sucht und dann entsprechend auswählt.
Und mittlerweile solltest du von alleine darauf kommen, wie man etwas sucht innnerhalb eines Arrays (das select Feld ist ein Array aus options).
Danke nochmals für alle Mühen
MFG
Markus
Moin Moin !
Ich würde dich bitten diese Funktion für mich zu erstellen..
"würde" ist Konjunktiv, d.h. der Rest des Satzes ist hypothetisch oder trifft nur unter gewissen Bedingungen zu.
Wahrscheinlich meinst Du es aber nur höflich und möchtest in Wirklichkeit sagen: "Ich bitte dich diese Funktion für mich zu erstellen." Du scheinst genug Geld zu haben, um mit Struppi einen Vertrag über die Programmierung von Software abzuschließen, aber nicht genug Zeit, um Dir mal ein paar Seiten aus SelfHTML in den Kopf zu drücken.
Oder verwechselst Du jetzt *Self*HTML mit *Get*HTML?
Alexander
HI
War ich denn unhöflich? Wenn ja sorry..
der Struppi ist ja echt ein wahnsinn!
Aber ich glaube er dreht schon langsam durch mit mir (Sorry Struppi)
MFG
Markus
Moin Moin !
War ich denn unhöflich? Wenn ja sorry..
Nein, eigentlich nicht. Nur "schreib mir Code" ist hier nicht gern gesehen, denn es widerspricht der Philosophie hinter SelfHTML. Siehe dazu http://selfsuche.teamone.de/cgi-bin/such.pl?suchausdruck=brot+rezept&lang=on&feld=alle&index_5=on&hits=100 und http://selfsuche.teamone.de/cgi-bin/such.pl?suchausdruck=gethtml&wort=on&lang=on&feld=alle&index_5=on&hits=100.
Dein Problem mit den Bundesländern zieht sich ja schon eine Weile durchs Forum, Du hast also Zeit genug. Vielleicht setzt Du Dich besser mal in einer ruhigen Stunde hin und fängst an, dich mit den Kapiteln über Javascript und Formularen in SelfHTML zu beschäftigen. SelfHTML ist Hypertext, d.h. Du brauchst es nicht von vorne nach hinten wie ein Buch zu lesen, sondern kannst sehr schnell nur die wichtigen Sachen herauspicken. Lade es Dir herunter, falls Du es noch nicht getan hast, damit sparst Du dem Server etwas Last und Dir etwas Online-Zeit: http://aktuell.de.selfhtml.org/extras/download.shtml und http://aktuell.de.selfhtml.org/extras/errata.htm
Es wundert mich echt, wie selten Du Dir bislang ein "RTFM!" (http://www.science.uva.nl/~mes/jargon/r/rtfm.html) eingefangen hast.
Alexander
Schon OK Alex!
Ich probiere schon eine ewigkeit damit herum bekomm aber nix brauchbares zustande - sorry ich weiß ist sicher eine Schande.. aber des programmieren ist halt nicht meines
vl so irgendwie..
irgendwie ja.
unhöflich ist es nicht gerade, aber mir ist es ein Rätsel, das du nicht ansatzweise zu verstehen scheinst was da passiert, obwohl ich dir ja immer ausführliche erkläre was passieren soll und in selfhtml steht das ja auch alles irgendwo drin.
function select()
select ist ein ganz blöder Name. überleg mal was die Funktion machen soll?
Ein option auswählen, bzw. den Index setzten.
function setIndex()
Jetzt fehlt aber noch was.
Die Funktion soll den Index setzten, der einem Bundesland entspricht (das du ja aus der Funktion getBundesland bekommst, nochmal zur Erinnerung:
function getBundesland(bezirk)
{
for(var b in Bundesland)
for(var i= 0; Bundesland[b][i];i++)
if(Bundesland[b][i] == bezirk)) return b;
}
var bezirk = "Hermagor";
var bundesland = getBundesland(bezirk);
So und jetzt willst du den Index des select Feldes setzten, das dem bundesland entspricht. Du musst deiner Funktion also noch sagen welches Bundesland du meinst:
function setIndex(b) <- b ist ein Platzhalter für den Wert, den du übergibst
{
}
Wo stehen die Bundesländer?
in dem Formular in der Liste Bundesland.
Also musst du diese Liste durchgehen und jeden Eintrag mit der Variabeln b vergleichen.
Da du aber das Formular als Parameter übergibst (hoffe ich mal)
onchange="chkBundesland(this.form);"
this.form ist die Referenz auf das Formular. und in der Funktion
function chkBundesland(form) ist dann form die Referenz.
Mit dieser Referenz kannst du eine Referenz auf das select Feld übergeben von dem du den Index setzten willst:
function setIndex(b, feld)
{
}
so, das Feld ist eine Kollektion (ein Array) von options mit der eigenschaft length.
for(var i=0; i < feld.length;i++)
if(feld.options[i].text == b) feld.selectedIndex = i;
Fertig.
aber ich zweifle echt langsam, dass dir das einleuchtet. Insofern frage ich micht warum du sowas schwieriges machen willst und nicht erstmal kleiner anfängst (z.b. mit einem Mouseoverbutton oder sowas).
Struppi.
HI
Danke euch beiden echt recht herzlich!
probiere das jetzt zusammen zubauen..
ok nehme setIndex()
function setIndex()
Ok benenne sie jetzt von searchBezirk auf getBundesland um:
function getBundesland(bezirk)
{
for(var b in Bundesland)
for(var i= 0; Bundesland[b][i];i++)
if(Bundesland[b][i] == bezirk)) return b;
}var bezirk = "Hermagor";
var bundesland = getBundesland(bezirk);
mit "Hermagor" im Test geht es super!
schalte mal das "Hermagor" aus:
// var bezirk = "Hermagor";
nun fängt schon mein 1 Problem an:
Er schreibt nach folgendem Testalert:
var bundesl = getBundesland(bezirk); alert(bundesl);
bezirk ist undeffiniert (mit Hermagor ist es noch gegangen)
nun die neue Funktion:
Genau
Wo stehen die Bundesländer?
in dem Formular in der Liste Bundesland.
Muß das machen weil ich das Formular nich als Parameter übergebe:
Also musst du diese Liste durchgehen und jeden Eintrag mit der Variabeln b vergleichen.
Mache ich nicht! bis jetzt chkBezirk() nun geändert auf getBundesland() oder setIndex() (mit od ohne b)
Da du aber das Formular als Parameter übergibst (hoffe ich mal)
onchange="chkBundesland(this.form);"
this.form ist die Referenz auf das Formular. und in der Funktion
function chkBundesland(form) ist dann form die Referenz.
Mit dieser Referenz kannst du eine Referenz auf das select Feld übergeben von dem du den Index setzten willst:
Hab im obigen Beitrag gelesen: und es jetzt so probiert:
function setIndex(b)
{
for(var i = 0; i < document.Formular.Bundesland.length; i++)
if(document.Formular.Bundesland[i].text == bundesl)
document.Formular.Bundesland.selectedIndex = i;
}
Wäre das falsch? wenn ich bein onchange dann setIndex() od mit (b) aufrufe?
Oder muß ich trotzdem diese Variante mit feld nehmen auch wenn ich das Formular nicht als Parameter übergebe:
function setIndex(b, feld)
{
}so, das Feld ist eine Kollektion (ein Array) von options mit der eigenschaft length.
for(var i=0; i < feld.length;i++)
if(feld.options[i].text == b) feld.selectedIndex = i;
Ist schon fast fertig würde ich sagen..
muß es jetzt nur mehr richtig zusammenbauen hoffe mit deiner Hilfe und bitte nicht verzweifeln!
Danke MFG
Markus
Hab im obigen Beitrag gelesen: und es jetzt so probiert:
function setIndex(b)
{
for(var i = 0; i < document.Formular.Bundesland.length; i++)
if(document.Formular.Bundesland[i].text == bundesl)
document.Formular.Bundesland.selectedIndex = i;
}Wäre das falsch? wenn ich bein onchange dann setIndex() od mit (b) aufrufe?
Ja, ich weiss nicht mehr was ich machen soll :-(
was ist b deiner Meinung nach?
Struppi.
Bin jetzt total verwirrt leider..
kenn mich nicht mehr aus b oder bundesland siehe vorrigen Beitrag..
MFG
Markus
Hier nochmal der aktuelle Code damit wir noch wissen über was wir reden und was noch falsch ist kann ja nicht mehr viel sein..
glaube es kommt kein wert für b raus.
function getBundesland(bezirk)
{
for(var b in Bundesland)
for(var i= 0; Bundesland[b][i];i++)
if(Bundesland[b][i] == bezirk) return b;
}
//var bezirk = "Hermagor";
var bundesl = getBundesland();
function setIndex(b)
{
for(var i = 0; i < document.Formular.Bundesland.length; i++)
if(document.Formular.Bundesland.options[i].text == b) document.Formular.Bundesland.selectedIndex = i;
}
Kann ja nicht mehr viel falsch sein.. Bitte dich es zu überprüfen!
Herzlichen Dank im voraus
Markus
Hier nochmal der aktuelle Code damit wir noch wissen über was wir reden und was noch falsch ist kann ja nicht mehr viel sein..
glaube es kommt kein wert für b raus.
Bitte, bitte, bitte.
setzt dich mal auseinader damit, was eon funktionsparameter, eine globale Variabel, eine Referenz ist und wie du das alles einsetzt.
function getBundesland(bezirk)
^^^^^^^
Das ist ein Funktionsparameter, den du...
{
for(var b in Bundesland)
for(var i= 0; Bundesland[b][i];i++)
if(Bundesland[b][i] == bezirk) return b;
... hier benutzt...
}
//var bezirk = "Hermagor";
var bundesl = getBundesland();
... aber es wird kein Parameter an die Funktion übergeben, warum nicht?
function setIndex(b)
{
for(var i = 0; i < document.Formular.Bundesland.length; i++)
if(document.Formular.Bundesland.options[i].text == b) document.Formular.Bundesland.selectedIndex = i;
}
wie gesagt du kannst an deine Funktion die Referenz auf das Formular übergeben.
Struppi.
Bitte, bitte, bitte.
ok überredet kommt doch was für b raus*gg*
function getBundesland(bezirk)
^^^^^^^
Das ist ein Funktionsparameter, den du...{
for(var b in Bundesland)
for(var i= 0; Bundesland[b][i];i++)
if(Bundesland[b][i] == bezirk) return b;... hier benutzt...
}
ok somit ist dann die obibge funktion richtig!
//var bezirk = "Hermagor";
var bundesl = getBundesland();... aber es wird kein Parameter an die Funktion übergeben, warum nicht?
Weil die obige Definition falsch ist! nehme an das das bundesl falsch ist weil es ja unten nirgends mehr benutzt wird:
Hab daher auch folgendes erfolglos probiert:
var b = getBundesland();
od
var b = getBundesland(bezirk);
und auch:
var bundesl = getBundesland(bezirk)
od
var bundesland = getBundesland(b)
alles erfolglos und teilweise auch sinnlos? hab mir immer wieder beispiele angeschaut aber da oben ist der wurm oder?
function setIndex(b)
{
for(var i = 0; i < document.Formular.Bundesland.length; i++)
if(document.Formular.Bundesland.options[i].text == b) document.Formular.Bundesland.selectedIndex = i;
}
also die obige Funktion paßt auch! auch ohne der referenz..
wie gesagt du kannst an deine Funktion die Referenz auf das Formular übergeben.
möchte mich zuerst damit beschäftigen dass es überhaupt geht und dann erst mit dieser Referenz auf das Formular
derzeit wird der spaß über:
onchange="setIndex()"
aufgerufen!
Was ja auch paßt wie du gesagt hast!
MFG
Markus
Hab daher auch folgendes erfolglos probiert:
var b = getBundesland();
od
var b = getBundesland(bezirk);
und auch:
var bundesl = getBundesland(bezirk)
od
var bundesland = getBundesland(b)
alles erfolglos und teilweise auch sinnlos? hab mir immer wieder beispiele angeschaut aber da oben ist der wurm oder?
function getBundesland(bezirk)
{
lass dir hier doch mal bezirk ausgeben: alert(bezirk)
function setIndex(b)
{
for(var i = 0; i < document.Formular.Bundesland.length; i++)
if(document.Formular.Bundesland.options[i].text == b) document.Formular.Bundesland.selectedIndex = i;
}also die obige Funktion paßt auch! auch ohne der referenz..
wie gesagt du kannst an deine Funktion die Referenz auf das Formular übergeben.
möchte mich zuerst damit beschäftigen dass es überhaupt geht und dann erst mit dieser Referenz auf das Formular
derzeit wird der spaß über:
onchange="setIndex()"
NEIN!!!!
setIndex erwartet einen Parameter, der das Bundeland als String beinhaltet und du übergibst gar nichts.
Ich kann nicht mehr.
Struppi.
alles erfolglos und teilweise auch sinnlos? hab mir immer wieder beispiele angeschaut aber da oben ist der wurm oder?
function getBundesland(bezirk)
{lass dir hier doch mal bezirk ausgeben: alert(bezirk)
hab ich schon oft ist: undefined
onchange="setIndex()"
NEIN!!!!
setIndex erwartet einen Parameter, der das Bundeland als String beinhaltet und du übergibst gar nichts.
ok dann halt onchange="setIndex(b)"
bilde mir aber ein dass du mal geschrieben hast das das falsch ist!
MFG
Markus
Fortsetzung vom vorrigen Beitrag:
Hier fehlt glaub ich ein .options nach Bundesland in der If Anweisung oder?
if(document.Formular.Bundesland.options[i].text == bundesl)
function setIndex(b)
{
for(var i = 0; i < document.Formular.Bundesland.length; i++)
if(document.Formular.Bundesland[i].text == bundesl)
document.Formular.Bundesland.selectedIndex = i;
}
Sollte var bundesl heißen oder? bleibt aber trotzdem undeffiniert(bezirk)
var bundesland = getBundesland(bezirk);
var bundesland = getBundesland(bezirk);
Was stimmt jetzt
gibts auch eine verwechslung von b und bundesl??
function setIndex(b)
oder
function setIndex(bundesl)
hab da jetzt bisschen was durcheinnander gebracht?
was paßt jetzt?
und kann ich es mit onchange setIndex() aufrufen?
Ende Teil2 (teil1 vorriger Beitrag)
MFG
Markus
Fortsetzung vom vorrigen Beitrag:
Hier fehlt glaub ich ein .options nach Bundesland in der If Anweisung oder?
if(document.Formular.Bundesland.options[i].text == bundesl)
function setIndex(b)
{
for(var i = 0; i < document.Formular.Bundesland.length; i++)
if(document.Formular.Bundesland[i].text == bundesl)
document.Formular.Bundesland.selectedIndex = i;
}Sollte var bundesl heißen oder? bleibt aber trotzdem undeffiniert(bezirk)
Nein. bundesl existiert in dieser Funktion nicht. Dort heißt es b!!!!!
var bundesland = getBundesland(bezirk);
var bundesland = getBundesland(bezirk);
Was stimmt jetzt
gibts auch eine verwechslung von b und bundesl??
nein, b ist ein Platzhalter den du mit dem inhalt von bundesl füllst.
function setIndex(b)
oder
function setIndex(bundesl)
function setIndex(b)
Struppi.
Hi
Hab jetzt alles ausgebessert und hier reingeschrieben irgendwo muß noch was sein:
siehe unten 14:18
[url :http://forum.de.selfhtml.org/?t=40837&m=223693]
MFG
markus
Hallo Markus
wie wärs damit:
function chkBezirk(bezirk)
{
var bezirk =document.Formular.Bezirk.selectedIndex;
if(document.Formular.Bezirk.length < 122) return true;
else
if(bezirk == 0) document.Formular.Bundesland.selectedIndex = 0;
else
for(var b=0; b < Bundesland.length; b++)
for(var i= 0; Bundesland[b][i];i++)
{
if(Bundesland[b][i] == bezirk)) document.Formular.Bundesland.selectedIndex =b;
break;
};
In der Dir vorgeschlagenen kürzeren Version fehlte das Setzen des Bundeslandes.
Gruß Ralf
Hallo Markus
wie wärs damit:
nicht ganz.
function chkBezirk(bezirk)
{
var bezirk =document.Formular.Bezirk.selectedIndex;
hier ist bezirk nur der Index, da müßtest du noch den Wert rausholen (der in text steckt.)
bezirk = document.Formular.Bezirk[document.Formular.Bezirk.selectedIndex].text;
Aber das ist nicht gefragt. Mit Hilfe von bezirk kann er rausfinden wie das dazugehörige Bundesland lautet (ich hab die ihm weiter unten mal geschrieben gehabt)
var bundesl = getBundesland(bezirk);
Der Rest muss dann lauten:
for(var i = 0; i < document.Formular.Bundesland.length; i++)
if(document.Formular.Bundesland[i].text == bundesl)
document.Formular.Bundesland.selectedIndex = i;
Struppi.