---
title: "MySelect.add - Blir fel i Explorer"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/178464-myselect-add-blir-fel-i-explorer"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "MickeA.com"
published: "2009-05-09T11:27:23.000Z"
updated: "2009-05-09T13:50:19.000Z"
replies: 7
views: 595
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/178464-myselect-add-blir-fel-i-explorer"
---

# MySelect.add - Blir fel i Explorer

## #1 — MickeA.com, 2009-05-09T11:27Z

Hej,

Jag fyller ett par \<select\> listor dynamiskt med ajax.
Problemet är att det fungerar inte i Explorer 7, får "Typmatchningsfel".

Koden som skapas kan se ut såhär:

```
var level_x0 = document.createElement("option"); 
level_x0.value = 1; 
level_x0.className = "row-odd"; 
level_x0.appendChild(document.createTextNode("Nivå 1")); 
[b]selectMenu.add(level_x0,null); [/b]

var level_x1 = document.createElement("option"); 
level_x1.value = 2; 
level_x1.className = "row-even"; 
level_x1.appendChild(document.createTextNode("Nivå 2")); 
[b]selectMenu.add(level_x1,null); [/b]

var level_x2 = document.createElement("option"); 
level_x2.value = 3; 
level_x2.className = "row-odd"; 
level_x2.appendChild(document.createTextNode("Nivå 3 & 4")); 
[b]selectMenu.add(level_x2,null); [/b]
```

Det är de fetstilta raderna som blir fel. 

Syntaxen för 'add' ska se ut såhär:

```
void add(in HTMLElement element, in HTMLElement before) raises(DOMException);
```

Koden som fyller listan ser ut såhär:

```
function createLevelList(index, predef_group)
{
	var selectMenu = getElemRefs("level_id");
	while (selectMenu.hasChildNodes()) {
		selectMenu.removeChild(selectMenu.firstChild);
	}
	try {
		[b]eval(ajax[index].response);[/b]
	} catch(err) {
		alert(err.description + "\n\n" + ajax[index].response);
	}
	getGroupList(document.forms['not_edit'].level_id, (predef_group ? predef_group : 0));
}
```

Funkar som sagt i Firefox..

Hur löser jag det här?

Permalänk: https://www.webforum.nu/p/178464

## #2 — MickeA.com, 2009-05-09T12:30Z

Nu har jag gjort om lite så att output'en från Ajax ser ut såhär:

```
var level_x0 = document.createElement("option");
level_x0.value = 0;
level_x0.className = "row-even";
level_x0.appendChild(document.createTextNode("-- välj --"));
var level_x1 = document.createElement("option");
level_x1.value = 1;
level_x1.className = "row-even";
level_x1.appendChild(document.createTextNode("Nivå 1"));
var level_x2 = document.createElement("option");
level_x2.value = 2;
level_x2.className = "row-odd";
level_x2.appendChild(document.createTextNode("Nivå 2"));
var level_x3 = document.createElement("option");
level_x3.value = 3;
level_x3.className = "row-even";
level_x3.appendChild(document.createTextNode("Nivå 3 & 4"));
var elOptOld = selectMenu.options[selectMenu.selectedIndex];
try {
	selectMenu.add(level_x0, elOptOld);
	selectMenu.add(level_x1, elOptOld);
	selectMenu.add(level_x2, elOptOld);
	selectMenu.add(level_x3, elOptOld);

} catch(ex) {
	selectMenu.add(level_x0, selectMenu.selectedIndex);
	selectMenu.add(level_x1, selectMenu.selectedIndex);
	selectMenu.add(level_x2, selectMenu.selectedIndex);
	selectMenu.add(level_x3, selectMenu.selectedIndex);
}
```

Läste här att man var tvungen att köra en specialare med try..catch för att det skulle funka i Explorer. Problemet just nu är att det även lade av i Firefox, utan att jag får något felmeddelande.

Några förslag?

Permalänk: https://www.webforum.nu/p/2184391

## #3 — Peter S, 2009-05-09T12:56Z

I stället för att säga select.add(option) så kan du testa:

```
selectMenu.options[selectMenu.options.length] = level_x0;
selectMenu.options[selectMenu.options.length] = level_x1;
...
selectMenu.options[selectMenu.options.length] = level_xN;
```

Permalänk: https://www.webforum.nu/p/2184394

## #4 — MickeA.com, 2009-05-09T13:09Z

Nu ser min output ut såhär:

```
var level_x0 = document.createElement("option");
level_x0.value = 0;
level_x0.className = "row-even";
level_x0.appendChild(document.createTextNode("-- välj --"));
var level_x1 = document.createElement("option");
level_x1.value = 1;
level_x1.className = "row-even";
level_x1.appendChild(document.createTextNode("Nivå 1"));
var level_x2 = document.createElement("option");
level_x2.value = 2;
level_x2.className = "row-odd";
level_x2.appendChild(document.createTextNode("Nivå 2"));
var level_x3 = document.createElement("option");
level_x3.value = 3;
level_x3.className = "row-even";
level_x3.appendChild(document.createTextNode("Nivå 3 & 4"));
try {
   selectMenu.options[selectMenu.options.length] = level_x0;
   selectMenu.options[selectMenu.options.length] = level_x1;
   selectMenu.options[selectMenu.options.length] = level_x2; 
   selectMenu.options[selectMenu.options.length] = level_x3;

} catch(ex) {
   selectMenu.options[selectMenu.options.length] = level_x0;
   selectMenu.options[selectMenu.options.length] = level_x1;
   selectMenu.options[selectMenu.options.length] = level_x2;
   selectMenu.options[selectMenu.options.length] = level_x3;
}
```

Fungerar fint i Firefox fortfarande, men i Explorer får jag:

```
Objektet stöder inte egenskapen eller metoden.
```

Vad är fel?

Permalänk: https://www.webforum.nu/p/2184396

## #5 — MickeA.com, 2009-05-09T13:32Z

Det här är helt sinnessjukt, jag har tagit exemplet härifrån: <http://www.mredkj.com/tutorials/tutorial005.html>

Den sidan funkar både i Firefox och i Explorer, min kod är ju identiskt. Förstår inte det här..

Permalänk: https://www.webforum.nu/p/2184400

## #6 — Peter S, 2009-05-09T13:34Z

Efter lite forskning visade det sig att följande gäller för Internet Explorer: antingen skriver man

```
var elm = document.createElement("option");
selectMenu.options.add(elm);
elm.innerHTML = "...";
```

...d.v.s. man anropar add() på options och sätter egenskaperna på elm *efter* att det add():ats.

Eller så skriver man så här (som också fungerar i ex. FF):

```
var elm = new Option("...");
selecMenu.options[selectMenu.options.length] = elm;
```

Permalänk: https://www.webforum.nu/p/2184401

## #7 — MickeA.com, 2009-05-09T13:41Z

Okej, jag kan inte lösa det enligt ditt andra exempel, eftersom inte verkar gå att sätta t.ex. klassnamn på varje option jag lägger till.

Eller går det?
Annars får jag generera olika output beroende på webbläsare och det känns lite onödigt.
Hur kan det komma sig att det fungerar på länken jag hänvisar till ovan (<http://www.mredkj.com/tutorials/tutorial005.html>)?

Där sätter dom egenskaperna *innan* .add

Permalänk: https://www.webforum.nu/p/2184403

## #8 — MickeA.com, 2009-05-09T13:50Z

Yes, har löst det...

Det här funkar:

```
var level_x0 = document.createElement("option");
level_x0.text = "-- välj --";
level_x0.value = 0;
level_x0.className = "row-even";
var level_x1 = document.createElement("option");
level_x1.value = 1;
level_x1.className = "row-even";
level_x1.text = "Nivå 1";
var level_x2 = document.createElement("option");
level_x2.value = 2;
level_x2.className = "row-odd";
level_x2.text = "Nivå 2";
var level_x3 = document.createElement("option");
level_x3.value = 3;
level_x3.className = "row-even";
level_x3.text = "Nivå 3 & 4";
try {
	selectMenu.add(level_x0, null);
selectMenu.add(level_x1, null);
selectMenu.add(level_x2, null);
selectMenu.add(level_x3, null);

	} catch(ex) {
		selectMenu.add(level_x0);
selectMenu.add(level_x1);
selectMenu.add(level_x2);
selectMenu.add(level_x3);

	}
```

Jag bytte ut *.appendChild(document.createTextNode());* mot *.text*

Permalänk: https://www.webforum.nu/p/2184406

---

Tråden på webben: https://www.webforum.nu/amne/javascript/178464-myselect-add-blir-fel-i-explorer
