Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 2027 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
JavaScript
gelöst Range (Slider) Javascript mit Plus-Minus Buttons (3)

Frage von internet2107 zum Thema JavaScript ...

JavaScript
gelöst JavaScript hochladen (12)

Frage von Patrick-IT zum Thema JavaScript ...

JavaScript
gelöst HTML-Javascript - Auslesen von Formularfeldern (1)

Frage von internet2107 zum Thema JavaScript ...

JavaScript
Javascript Cookie ablaufdatum zurückgeben (1)

Frage von Roadrunner777 zum Thema JavaScript ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
RODC über VPN - Verbindung weg (10)

Frage von stefan2k1 zum Thema Windows Server ...