# Problem: option aus select löschen



## evoleena (10. August 2008)

Hallo Leute ich möchte gerne ein bestimmtes option aus einem select löschen.
leider klappt das nicht. ich vermute auch das das falsch ist mit length, da length ja nur die anzahl der Einträge ist. Hab leider nur das gefunden. 

Aber ich hoffe ihr könnt mir helfen


```
function my_func(){
  var g_id =document.drucker.gebaeude.value;
  var anz_raeume = document.drucker.raum.options.length;
  
  for(var i=0;i<anz_raeume;i++){
      if(document.drucker.raum.options[i].id != g_id){
            document.drucker.raum.options[i][document.drucker.raum.options[i].length - 1]=null;
      }
      //document.Testform.Auswahl.options[document.Testform.Auswahl.length - 1] = null;
  }
  
}
```

Gruss
Evo


----------



## Chumper (10. August 2008)

```
function my_func(){
  var g_id =document.drucker.gebaeude.value;
  var anz_raeume = document.drucker.raum.options.length;
  
  for(var i=0;i<anz_raeume;i++){
      if(document.drucker.raum.options[i].id != g_id){
            document.drucker.raum.options[i] = null;
      }
      //document.Testform.Auswahl.options[document.Testform.Auswahl.length - 1] = null;
  }
  
}
```

Solltest du das von SelfHtml habe:
Nicht alles was du auf Selfhtml liest einfach kopieren


----------



## evoleena (10. August 2008)

Da meckert er mich leider voll, das das undefined ist.

Ja das hatte ich von selfhtml aber das war mir mit der length er gleich ein wenig komisch.


----------



## Chumper (10. August 2008)

geprüft ob in den Variablen was drinsteht, und wenn ja, dann das richtige?


----------



## evoleena (10. August 2008)

du meinst meine beiden variabelen oben mein anz und g_id oder
Ja die hauen soweit hin.


----------



## Chumper (10. August 2008)

versuchs mal so:

```
function my_func(){
  var g_id =document.drucker.gebaeude.value;
  var anz_raeume = document.drucker.raum.options.length-1;
  
  for(var i=0;i<anz_raeume;i++){
      if(document.drucker.raum.options[i].id != g_id){
            document.drucker.raum.options[i] = null;
      }
      //document.Testform.Auswahl.options[document.Testform.Auswahl.length - 1] = null;
  }
  
}
```


----------



## evoleena (10. August 2008)

Nee gleiches Problem

```
document.drucker.raum.options[i] is undefined
[Break on this error] if(document.drucker.raum.options[i].id != g_id){
```

Ich würde denken er will noch irgendein Parameter nach dem options[i] haben, aber ich wüßte nicht welchen.


----------



## evoleena (10. August 2008)

Lustig wenn ich .text = null setze, dann ist der Text weg, aber die Platzhalter sind noch da .
Bekommt man die vielleicht noch weg?


----------



## Chumper (10. August 2008)

Meinst du vll 
	
	
	



```
document.drucker.raum.options[i].value
```

oder 
	
	
	



```
document.drucker.raum.options[i].text
```


----------



## evoleena (10. August 2008)

das .text meine ich.
Eigentlich müsste ich die Länge ja jetzt noch reduzieren wenn ich das aber tue, dann nimmt er immer die letzten Elemente.

Kann man das beeinflussen

Oder geht es, das man innerhalb der Funktion ein neues DropDown aufbaut, mit den Elementen die benötigt werden, und damit das Alte DropDown ersetzt


----------



## Chumper (10. August 2008)

gut, dann probier das hier mal:

```
document.getElementById('list2').removeChild(document.getElementById('list')[i]);
```


----------



## evoleena (11. August 2008)

Für was ist das jetzt genau?
Welches ist list2 und was list1?

Weil das undefined ist.

*bin grad etwas überfordert* Ein bißchen mehr Erklärung des vorgeschlagenen wäre ganz hilfreich


----------



## Chumper (11. August 2008)

sry, falscher Code und ich war im falschen Thread von dir
also:

```
function my_func(){
  var g_id =document.drucker.gebaeude.value;
  var anz_raeume = document.drucker.raum.options.length-1;
  
  for(var i=0;i<anz_raeume;i++){
      if(document.drucker.raum.options[i].id != g_id){
            document.drucker.raum.removeChild(document.drucker.raum.options[i]);
      }
      //document.Testform.Auswahl.options[document.Testform.Auswahl.length - 1] = null;
  }
  
}
```
Ich hole mir die liste und benutze die removeChild()-Funktion, ich übergebe ihr den aktuellel Listeneintrag.


----------



## evoleena (11. August 2008)

Okay so hatte ich es jetzt auch shcon reingeschrieben, aber da hab ich grad was sehr merkwürdiges erlebt.
und zwar habt meine Liste momentan 8 Elemente nach der Reihen habe die Folgende id:
5
10
2
10
3
3
3
3

so wenn ich jetzt das Gebäude auswähle, welches bei den Räumen die id 3 hat, dann müsste er in die if Anweisung 4 mal reingehen. Macht er aber nicht. Ich hab mir jetzt bei jedem eintritt die Id des Elementes ausgeben lassen und das einzige was er mit ausgibt ist 5 und 2. Was ist mit den beiden 10en

Hab eine 10 jetzt auf eine 9 geändert aber die ignoriert er auch woran liegt das?

Mein option sieht so aus

```
<option value='".$help['r_nr']."' id='".$help['g_id']."'>".$help['r_nr']."</option>
```

Aber die Funktion mit dem remove würde gehen, auch wenn er bei mir anstatt 4 zu löschen nur 2 löscht


----------



## Chumper (11. August 2008)

Eine ID ist immer einzigartig und darf nur einmal verwendet werden.
Denke da liegt das Problem, sobald du eine id öfter als einmal vergibst, gibt es Probleme.


----------



## evoleena (11. August 2008)

Ja aber ich habe doch die eine 10 auf eine 9 geändert und das Problem bleibt weiterhin.

Ich verstehe auch nicht so recht, warum das for nicht so richtig geht er geht keine 8 mal rein.
sondern verschieden.

Wenn das mit der id nicht so recht geht, was könnte ich dann noch nehmen, um an dem Raum für JavaSCript kenntlich zu machen, zu welchem Gebäude der gehört?


----------



## Quaese (11. August 2008)

Hi,

zähl in der for-Schleife rückwärts, d.h. von der Anzahl der Optionen bis Null. Wird die Schleife in der anderen Richtung durchlaufen, rücken die restlichen Optionen beim Löschen um einen Platz nach vorne und die Abbruchbedingung läuft ins Leere.

Willst du mehr Optionen löschen, so könntest du als Kriterium das Attribut *class* verwenden. In der if-Anweisung prüfst du mittels der Methode *search* und eines regulären Ausdrucks, ob die Option gelöscht werden soll.

```
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
  <!--
function my_func(strSearch){
  var g_id =document.drucker.gebaeude.value;
  var anz_raeume = document.drucker.raum.options.length;

  // Regulären Ausdruck generieren
  var strPattern = new RegExp("\\b" + strSearch + "\\b");

  for(var i=(anz_raeume-1); i>=0; i--){
    if(document.drucker.raum.options[i].className.search(strPattern) != -1){
      document.drucker.raum.removeChild(document.drucker.raum.options[i]);
    }
  }
}
 //-->
</script>
</head>
<body>
<form name="drucker">
  <input type="text" name="gebaeude" value="id_02">
  <select name="raum">
    <option value="1" id="id_01">g 1</option>
    <option value="2" id="id_02" class="optClass">g 2</option>
    <option value="3" id="id_03">g 3</option>
    <option value="4" id="id_04">g 4</option>
    <option value="5" id="id_05" class="optClass">g 5</option>
  </select>
  <button onclick="my_func('optClass'); return false;">my_func()</button>
</form>
</body>
</html>
```
Ciao
Quaese


----------



## evoleena (11. August 2008)

Mhh gute Idee mit dem Rückwärtszählen. 
Habs auf Grund der Eile jetzt erstmal mit disabled gemacht. Werden das dann aber vllt. nächste Woche noch testen. Und melde mich dann nochmal wenns klappt oder wenns Probleme gibt.

Gruss
Evo


----------

