Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst JavaScript - Verschachteltes Auswahlfeld

Mitglied: pemi

pemi (Level 1) - Jetzt verbinden

18.10.2012, aktualisiert 17:34 Uhr, 2065 Aufrufe, 5 Kommentare

Hallo Leute,

ich hab ein Problem mit einer verschachtelten Auswahl.

Ziel:
Wenn Auswahl1 getroffen wird, soll in Abhängigkeit die Auswahl2 zur Verfügung stehen.

Problem:
JavaScript scheint die Auswahl2 bei einer Neuauswahl von Auswahl1 nicht korrekt zu löschen. So dass teilweise (siehe M5 und M7) mehr Optionen zur Verfügung stehen, als im Script hinterlegt.

Ich hoffe ihr könnt mir helfen.

Danke & Gruß

01.
<html> 
02.
 
03.
<head> 
04.
  <title>Forumlar</title> 
05.
  <script type="text/javascript"> 
06.
    var mygroup = new Array(); 
07.
     
08.
    // reset 
09.
    mygroup[0] = new Array(); 
10.
    mygroup[0][0] = new Option("Bitte waehlen Sie zunaechst einen Mandanten", 0); 
11.
     
12.
    mygroup[1] = new Array(); 
13.
    mygroup[1][0] = new Option("(10)", 10); 
14.
    mygroup[1][1] = new Option("(40)", 40); 
15.
    mygroup[1][2] = new Option("(50)", 50); 
16.
    mygroup[1][3] = new Option("(60)", 60); 
17.
    mygroup[1][4] = new Option("(95)", 95); 
18.
     
19.
    mygroup[2] = new Array(); 
20.
    mygroup[2][0] = new Option("(10)", 10); 
21.
    mygroup[2][1] = new Option("(50)", 50); 
22.
    mygroup[2][2] = new Option("(60)", 60); 
23.
    mygroup[2][3] = new Option("(95)", 95); 
24.
     
25.
    mygroup[3] = new Array(); 
26.
    mygroup[3][0] = new Option("(10)", 10); 
27.
    mygroup[3][1] = new Option("(50)", 50); 
28.
    mygroup[3][2] = new Option("(60)", 60); 
29.
    mygroup[3][3] = new Option("(95)", 95); 
30.
     
31.
    mygroup[4] = new Array(); 
32.
    mygroup[4][0] = new Option("(10)", 10); 
33.
    mygroup[4][1] = new Option("(50)", 50); 
34.
    mygroup[4][2] = new Option("(60)", 60); 
35.
    mygroup[4][3] = new Option("(70)", 70); 
36.
    mygroup[4][4] = new Option("(71)", 71); 
37.
    mygroup[4][5] = new Option("(72)", 72); 
38.
    mygroup[4][6] = new Option("(73)", 73); 
39.
    mygroup[4][7] = new Option("(74)", 74); 
40.
    mygroup[4][8] = new Option("(75)", 75); 
41.
    mygroup[4][9] = new Option("(76)", 76); 
42.
    mygroup[4][10] = new Option("(77)", 77); 
43.
    mygroup[4][11] = new Option("(95)", 95); 
44.
     
45.
    mygroup[5] = new Array(); 
46.
    mygroup[5][0] = new Option("(00)", 00); 
47.
     
48.
    mygroup[6] = new Array(); 
49.
    mygroup[6][0] = new Option("(10)", 10); 
50.
    mygroup[6][1] = new Option("(50)", 50); 
51.
    mygroup[6][2] = new Option("(60)", 60); 
52.
    mygroup[6][3] = new Option("(90)", 90); 
53.
    mygroup[6][4] = new Option("(95)", 95); 
54.
     
55.
    mygroup[7] = new Array(); 
56.
    mygroup[7][0] = new Option("(00)", 00); 
57.
     
58.
    mygroup[8] = new Array(); 
59.
    mygroup[8][0] = new Option("(10)", 10); 
60.
    mygroup[8][1] = new Option("(50)", 50); 
61.
    mygroup[8][2] = new Option("(60)", 60); 
62.
    mygroup[8][3] = new Option("(95)", 95); 
63.
     
64.
    mygroup[9] = new Array(); 
65.
    mygroup[9][0] = new Option("(10)", 10); 
66.
    mygroup[9][1] = new Option("(50)", 50); 
67.
    mygroup[9][2] = new Option("(60)", 60); 
68.
    mygroup[9][3] = new Option("(95)", 95); 
69.
     
70.
    mygroup[10] = new Array(); 
71.
    mygroup[10][0] = new Option("(10)", 10); 
72.
    mygroup[10][1] = new Option("(50)", 50); 
73.
    mygroup[10][2] = new Option("(60)", 60); 
74.
    mygroup[10][3] = new Option("(95)", 95); 
75.
     
76.
    mygroup[11] = new Array(); 
77.
    mygroup[11][0] = new Option("(10)", 10); 
78.
    mygroup[11][1] = new Option("(50)", 50); 
79.
    mygroup[11][2] = new Option("(60)", 60); 
80.
    mygroup[11][3] = new Option("(95)", 95); 
81.
     
82.
    // mygroup[ZB_PRIMARY_KEY_SELECT][FORTLAUFENDE_ZAHLEN_AB_0] = new Option(OPTION_TEXT, ZB_PRIMARY_KEY_SUBSELECT) 
83.
     
84.
    // alle <option>s des sub-<select> entfernen 
85.
    function ResetSubSelect(form, subSelect) 
86.
87.
        var e = form.elements[subSelect]; 
88.
        for (var i = 0; i < e.options.length; i++) { 
89.
            e.options[i] = null; 
90.
91.
92.
     
93.
    // Uebergebenes Element (sub-<select>) deaktivieren 
94.
    function DisableSubSelect(elem) 
95.
96.
        elem.disabled = 1; 
97.
98.
     
99.
    // Uebergebenes Element (sub-<select>) aktivieren 
100.
    function EnableSubSelect(elem) 
101.
102.
        elem.disabled = 0; 
103.
104.
     
105.
    // tritt bei onchange in Kraft, bzw. bei der Initiierung 
106.
    function ShowSubSelect(elem, subSelect) 
107.
108.
        // alle <option>s des sub-<select> entfernen (reset) 
109.
        ResetSubSelect(elem.form, subSelect); 
110.
         
111.
        // welcher value wurde ausgewählt 
112.
        var i = elem.options[elem.selectedIndex].value; 
113.
        // sub-<select> 
114.
        var s = elem.form.elements[subSelect]; 
115.
         
116.
        // dem <sub>-select die <option>s aus mygroup zuordnen 
117.
        for (var k = 0; k < mygroup[i].length; k++) { 
118.
            s.options[k] = mygroup[i][k]; 
119.
120.
         
121.
        // war die ausgewaehlte value 0? dann sub-<select> deaktivieren 
122.
        if (i == 0) { 
123.
            DisableSubSelect(s); 
124.
        } else { 
125.
            EnableSubSelect(s); 
126.
127.
128.
     
129.
    function InitSubSelect() 
130.
131.
        // leeres sub-<select> mit mygroup[0] füllen 
132.
        ShowSubSelect(document.forms["Formular"].elements["mandant"], "rgkreis"); 
133.
134.
  </script> 
135.
</head> 
136.
 
137.
<body onload="InitSubSelect()"> 
138.
 
139.
  <table> 
140.
    <tr> 
141.
      <td> 
142.
      </td> 
143.
      <td valign="top"> 
144.
        <h2>Formular</h2> 
145.
      </td> 
146.
    </tr> 
147.
  </table> 
148.
 
149.
 
150.
  <!-- Formular zur generierung der Daten --> 
151.
  <form name="Formular" action="test.html" method="post"> 
152.
    <p> 
153.
      Auswahl1:<br> 
154.
      <select name="mandant" size="1" onchange="ShowSubSelect(this,'rgkreis')"> 
155.
      <option value="0">Bitte waehlen Sie einen Mandanten</option> 
156.
      <option value=1>(01) - M1</option> 
157.
      <option value=2>(02) - M2</option> 
158.
      <option value=3>(03) - M3</option> 
159.
      <option value=4>(04) - M4</option> 
160.
      <option value=5>(05) - M5</option> 
161.
      <option value=6>(06) - M6</option> 
162.
      <option value=7>(07) - M7</option> 
163.
      <option value=8>(08) - M8</option> 
164.
      <option value=9>(09) - M9</option> 
165.
      <option value=10>(10) - M10</option> 
166.
      <option value=11>(11) - M11</option> 
167.
      </select> 
168.
    </p> 
169.
    <p> 
170.
      Auswal2:<br> 
171.
      <select name="rgkreis" size="1" disabled="disabled"> 
172.
      </select> 
173.
    </p> 
174.
    <p> 
175.
      Bitte geben Sie Ihren Namen (Vorname Nachname) ein:<br> 
176.
      <input name="name" type="text" size="50" maxlength="100"> 
177.
    </p> 
178.
    <p> 
179.
      Bitte geben Sie den Grund an:<br> 
180.
      <input name="grund" type="text" size="50" maxlength="100"> 
181.
    </p> 
182.
    <p> 
183.
      <input type="submit" value="Absenden"> 
184.
    </p> 
185.
  </form> 
186.
 
187.
 
188.
</body> 
189.
 
190.
</html>
Mitglied: 76109
19.10.2012 um 08:00 Uhr
Hallo pemi!

Versuchs mal mit -1 in Codezeile 96 (False=0, True=-1)?

Gruß Dieter
Bitte warten ..
Mitglied: pemi
19.10.2012 um 08:10 Uhr
Hallo Dieter,

vielen Dank für deine Antwort. Aber leider bringt das keine Verbesserung.

Gruß

Michael
Bitte warten ..
Mitglied: Arano
19.10.2012 um 20:28 Uhr
Hallo Pemi,

ich glaube dein "Reset" funktioniert gar nicht bzw. rufst du die Funktion mit falschen Parametern auf !
Ich habe da mal die relevanten Code-Zeilen (HTML und Javascript) zusammengestellt:
01.
<select name="mandant" size="1" onchange="ShowSubSelect(this,'rgkreis')">  
02.
 
03.
function ShowSubSelect(elem, subSelect)  
04.
05.
    // ... 
06.
    ResetSubSelect(elem.form, subSelect); 
07.
    // ... 
08.
}
In diesen Abschnitten wird klar, das elem das <select>-Objekt "mandant" ist !
Beim Aufruf von "ResetSubSelect()" versuchst du interessanter weise auf das Objekt "form" des Objektes "elem/this/select" zuzugreifen... das nicht existiert.
this ist nicht "dieses Formular", sondern "dieses Elemente" also nur das <select>
So übergibst du der Reset-Funktion auch einen falschen Parameter der nicht weiterverarbeitet werden kann.


~Arano
Bitte warten ..
Mitglied: pemi
28.10.2012 um 23:12 Uhr
hi arano,

wie wäre es denn richtig?

gruß
Bitte warten ..
Mitglied: Arano
02.11.2012, aktualisiert um 16:35 Uhr
SO ! LÖSUNG !!!! :D

Vorweg, ich war bislang zu faul das ganze mal in eine Datei zu speichern und selber dran herum zu doktorn... kommt auch daher weil mir das Element-"form", welches scheinbar das Eltern Formular referenziert, noch nicht untergekommen ist und ich so einige "Fehler" mehr gesehen habe - die ich aber nicht alle selber beheben oder ansprechen wollte. Mein Fehler !
Ich finde auch auf die schnelle nichts zu "form"^, hast du was lesbares für mich ?

Nunja, jetzt habe ich das halt doch in eine Datei gespeichert und aufgerufen, bisschen hin bisschen her, 10 Minuten später gelöst.

Dein Logik die Elemente des SubSelects zu löschen ist nicht ganz korrekt !
01.
    function ResetSubSelect(form, subSelect) 
02.
03.
        var e = form.elements[subSelect]; 
04.
        for (var i = 0; i < e.options.length; i++) { 
05.
            e.options[i] = null; 
06.
07.
    }
Der Gedanke, ermittle die Anzahl der Elemente und lösche sie dann der Reiche nach. ist ja eigentlich nicht verkehr, ABER sobald das erste Element gelöscht ist stimmt die Anzahl der Elemente nicht mehr, ist ja jetzt eins WENIGER ;)
Oder besser gesagt, die Elemente rutschen von unten nach oben nach !
zum Beispiel:
Die hast ein Select mit 5 Elementen - index 0-4
(a,b,c,d,e)
Lösche Element[0], verbleiben 4, (b,c,d,e)
Lösche Element[1], verbleiben 3, (b,d,e)
Lösche Element[2], verbleiben 2, (b,d)
Lösche Element[3], ERROR Index 3 gibt es nicht mehr, es verbleiben 2 Elemente (b,d) mit den Indexen 0 und 1

Die Lösung ist also 5 mal das erste Element zu löschen, oder einfach hinten anzufangen
(a,b,c,d,e)
Lösche Element[4], verbleiben 4, (a,b,c,d)
Lösche Element[3], verbleiben 3, (a,b,c)
Lösche Element[2], verbleiben 2, (a,b)
Lösche Element[1], verbleiben 1, (a)
Lösche Element[0], verbleiben 0, ()

01.
    function ResetSubSelect(form, subSelect) 
02.
03.
        var e = form.elements[subSelect]; 
04.
        for (var i=e.options.length; i>=0; i--) 
05.
            e.options[i] = null; 
06.
    }
Dazu kommt die Verwirrung, dass die Elemente die beim fehlerhaften Löschen übergeblieben sind, komplett oder NUR teilweise mit den neuen Elementen überschrieben wurden.


Das sollte dein Problem nun gelöst haben


Ein schönes Wochenende
~Arano


Edit:
Okay, jetzt habe ich es doch gefunden, das "form" selfHTML - form
Nein, war mir bislang unbekannt das es solch eine Eigenschaft gibt.
*ding* wieder ein Stückchen schlauer geworden.
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Verschachtelte wenn Funktion
gelöst Frage von PeppinoMicrosoft Office4 Kommentare

Hallo zusammen, ich würde gerne folgenden Output haben (Budget und Ausgabencontrolling): Angenommen ich habe ein Budget von 10.000Euro. jetzt ...

Visual Studio
Verschachtelte Arrays
gelöst Frage von MarcoBornVisual Studio19 Kommentare

Hallo Forum, ich habe in VB.NET 6 Arrays, die alle dieselbe Länge, aber unterschiedliche Datentypen haben. Array1 ist vom ...

Datenbanken
Verschachtelte SQL-Abfrage
gelöst Frage von User1000Datenbanken4 Kommentare

Hallo! Ich hänge heute Nachmittag an einer SQL-Abfrage und komme nicht auf das Ergebnis. Vielleicht kann jemand helfen? Vorhanden: ...

Batch & Shell

Verschachtelte FOR-Schleife mit einem Argument

gelöst Frage von mp-homeBatch & Shell3 Kommentare

Hallo Forum, ich versuche mehrere FOR-Schleifen in eine verschachtelte FOR-Schleife zu ändern. Leider scheine ich zu doof für dieses ...

Neue Wissensbeiträge
iOS
IOS 11.2.6 verfügbar
Information von sabines vor 2 StundeniOS

Mit dem Update soll der Bug behoben werden, bei dem eine bestimmte Zeichenkette IOS zum Absturz gebracht hat.

Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 16 StundenSicherheit

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 1 TagInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 1 TagErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Heiß diskutierte Inhalte
Server
Route-Befehl Unterstützung (unter CMD)
gelöst Frage von FKRR56Server38 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...

Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1028 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgbornMicrosoft17 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

LAN, WAN, Wireless
VPN Cisco ASA5505 PaloAlto PA-200
gelöst Frage von YannoschLAN, WAN, Wireless15 Kommentare

Hallo zusammen, ich würde gerne ein Site-to-Site VPN zwischen den beiden Standorten aufbauen. PaloAlto PA200 Internetanschluss Deutsche Telekom GK ...