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

Frage Entwicklung JavaScript

Mitglied: pemi

pemi (Level 1) - Jetzt verbinden

18.10.2012, aktualisiert 17:34 Uhr, 2061 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
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 ...

Entwicklung
Verschachtelte IF Abfrage Powershell
gelöst Frage von HanutaEntwicklung19 Kommentare

Hallo Zusammen, habe ein Programm, das es in verschiedenen Versionen gibt 4.5.0 4.5.3 4.6.2 4.6.3 Das Programm soll überall ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 13 StundenApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 18 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 18 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 1 TagInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Windows XP
Windows XP Aktivieren geht nicht
Frage von tetikmiroWindows XP13 Kommentare

Hallo Ich habe einen Windows XP mit einen vCenter Converter umgezogen auf eine ESXI. Soweit funktioniert dies auch ohne ...

Blogs
Immer wiederkehrende PHP Fehlermeldung bei Wordpress UTF-8 - ASCII
gelöst Frage von vcdweltBlogs11 Kommentare

Hi, seit einiger Zeit wird mein error_log meines Wordpress Blogs mit immer der gleichen Fehlermeldung überschwemmt. 14-Dec-2017 08:18:05 UTC ...

Switche und Hubs
Redundante L2 LWL Leitung über 2 Standorte - Spanning Tree - HP Equipment
gelöst Frage von ResolvSwitche und Hubs10 Kommentare

Hallo, ich stehe vor der Herausforderung eine Redundante L2 LWL Leitung über 2 Standorte herzustellen. Grundsätzliches Switching Know How ...