---
title: "Använda två selectboxar"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/165066-använda-två-selectboxar"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "addeweb"
published: "2007-10-01T20:35:17.000Z"
updated: "2007-10-05T20:12:20.000Z"
replies: 13
views: 586
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/165066-använda-två-selectboxar"
---

# Använda två selectboxar

## #1 — addeweb, 2007-10-01T20:35Z

Jag har gjort iordning 2 st selectboxar varav ena för huvudmenyrubriker och den andra med undermenyrubriker. Tanken med denna funktion är att först välja önskad huvudmenyrubrik för att sedan få en lista med underrubriker i den andra boxen beroende på vilken huvudrubrik som valts. Om ingen val har gjorts i en av selectboxarna kan en sida bli huvudsida med egen toppmenyrubrik, annars undersida med menyrubrik om val har gjorts. När en önskad menyrubrik har valts, infogas uppgifterna från ett popup-fönster med selectboxarna i till en sida som ska läggas in i menyn och sparas. Problemet är att jag inte får fram menyrubriker i det andra selectboxen när jag valt en menyrubrik i den första boxen. I första boxen finns det också blanka rader mellan menyrubrikerna. Jag har kikat på källkoden till sidan men inte kunnat hittat felen med inga menyrubriker i det andra boxen och blankrader som uppstår i första boxen. I källkoden kunde jag också se att en menyrubrik har egna rätt underrubriker som fortfarande inte syns i andra boxen på sidan. Ingen som kan se vad jag har missat? Jag har inte gjort något liknande med 2 selectboxar tidigare, att först välja i ena boxen för att sedan välja i den andra boxen så att en sida hamnar på önskad plats. Tacksam för hjälp. Lätt att bli hemmablind på egen kod. Jag använder både javascript och PHP till denna funktion. 

```php
<?php 
$result = mysql_query("SELECT * FROM menu WHERE parent = 0 ORDER BY sequence")
 or die(mysql_error());
	
	$nr = 0; 
	
	while($row = mysql_fetch_assoc($result)){
	
		$topmenu_mid[$nr] = $row['mid'];
		$topmenu_heading[$nr] = $row['heading']; 
		
		$submenu_mid[$nr] = array();	
	 	$submenu_heading[$nr] = array();
		
		$result2 = mysql_query("SELECT * FROM menu WHERE parent = '".$row['mid']."' AND child_of = 0 ORDER BY sequence")
 or die(mysql_error()); 
		
while($row2 = mysql_fetch_assoc($result2)){		
			$submenu_mid[$nr][] = "'".$row2['mid']."'";
			$submenu_heading[$nr][] = "'".$row2['heading']."'"; 			
		}		
		$nr++; 			
	}
	foreach($submenu_mid as $key => $row){
		$submenu_mid[$key] = implode(", ", $row);	
	}
	foreach($submenu_heading as $key => $row){
		$submenu_heading[$key] = implode(", ", $row);	
	}	
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Välj menyrubrik</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="/css/layout.css" rel="stylesheet" type="text/css" />
<script language="JavaScript" src="../jscripts/scripts.js"></script>
<script language="JavaScript" type="text/javascript">
<!--
var submenu_mids = new Array();
var submenu_headings = new Array();
<?php 
	foreach($submenu_mid as $key => $row){
		echo "submenu_mids[$key] = new Array($row);\n";	
	}
	foreach($submenu_heading as $key => $row){
		echo "submenu_headings[$key] = new Array($row);\n";	
	}	
?>

function chooseMenu( id, theForm ){
	theForm.child_of.options.length = submenu_mids[id].length+1;
	for(i=0; i<submenu_mids[id].length; i++){
		theForm.child_of.options[i+1].text = submenu_headings[id][i];
		theForm.child_of.options[i+1].value = submenu_mids[id][i];	
	}
}
-->
</script>
</head>
<body id="body_print">
<h3>Välj menyrubrik</h3>
<form name="myform" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
	<select name="parent" onChange="chooseMenu(this.options[this.selectedIndex].value, this.form)">
	<option>Ej valt</option>
	<?php	
		for($m=0; $m<count($topmenu_mid); $m++){
			echo "<option value=\"".$topmenu_mid[$m]."\">".$topmenu_heading[$m]."<option>\n";
		}	
	?>	
	</select>
	<select name="child_of">
		<option>Ej valt</option>
	</select>
	<input type="submit" name="insert" value="Infoga" />
</form>
<?php

	mysql_close($connection); 
?>
<p style="margin-top: 20px; text-align: center">
<input type="button" name="close" onclick="window.close();" value="Stäng fönstret!" />
</p>
</body>
```

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

## #2 — Peter S, 2007-10-02T16:07Z

Jag tror det underlättar om du endast visar HTML- och JS-kod.

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

## #3 — addeweb, 2007-10-02T17:02Z

Det skulle jag ha gjort men det är både Javascript och PHP i koden. Helheten skulle nog gå förlorat om jag separerar koden. Det är väl inte heller meningen att jag ska behöva lägga in samma sak i två olika forum? En kod för PHP-forumet och samma i Javascript-forumet? Jag kan inte stå på två ben samtidigt, därför valde jag Javascript-forumet.

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

## #4 — Peter S, 2007-10-02T17:05Z

Men om du väljer Visa källa i webbläsaren och klistrar in resultatet här, så slipper du klippa ut PHP-koden för hand (vilket faktiskt inte alls skulle vara någon bra lösning).

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

## #5 — addeweb, 2007-10-02T19:41Z

Ok, det skulle jag ha tänkt på. Här är källkoden.

```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Välj menyrubrik</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="/css/layout.css" rel="stylesheet" type="text/css" />
<script language="JavaScript" src="../jscripts/scripts.js"></script>
<script language="JavaScript" type="text/javascript">
<!--
var submenu_mids = new Array();
var submenu_headings = new Array();
submenu_mids[0] = new Array();
submenu_mids[1] = new Array('5', '6', '11');
submenu_mids[2] = new Array();
submenu_mids[3] = new Array();
submenu_headings[0] = new Array();
submenu_headings[1] = new Array('N&auml;ringsl&auml;ra', 'Fettf&ouml;rbr&auml;nning', 'Ordlista A-&Ouml;');
submenu_headings[2] = new Array();
submenu_headings[3] = new Array();

function populate( id, theForm ){
	theForm.child_of.options.length = submenu_mids[id].length+1;
	for(i=0; i<submenu_mids[id].length; i++){
		theForm.child_of.options[i+1].text = submenu_headings[id][i];
		theForm.child_of.options[i+1].value = submenu_mids[id][i];	
	}
}
-->
</script>
</head>
<body id="body_print">
<h3>Välj menyrubrik</h3>
<form name="myform" action="/content_menu_selectbox.php" method="post">
	<select name="parent" onChange="populate(this.selectedIndex, this.form.child_of)">

	<option>Ej valt</option>
			<option value="2">OM MIG<option>
		<option value="3">MAT &amp; TR&Auml;NING<option>
		<option value="21">PERSONLIG TR&Auml;NING<option>
		<option value="4">KONTAKT<option>

	
	</select>
	<select name="child_of">
		<option>Ej valt</option>
	</select>
	<input type="submit" name="insert" value="Infoga" />
</form>
<p style="margin-top: 20px; text-align: center"><input type="button" name="close" onclick="window.close();" value="Stäng fönstret!" /></p>
</body>
</html>
```

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

## #6 — Peter S, 2007-10-03T16:04Z

```
onchange="populate(this.selectedIndex, this.form)"
```

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

## #7 — addeweb, 2007-10-03T19:21Z

Det fungerar men inte riktigt bra ännu eftersom den första menyrubriken överst i den första selectboxen har undermenyrubriker  i andra boxen och som borde istället tillhöra den andra menyrubriken under den första.

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

## #8 — Peter S, 2007-10-04T17:31Z

Nu skall vi se...

"den första menyrubriken överst i den första selectboxen" --\> "Ej valt", har alltså undermenyrubriker i den andra boxen? Nja, den är ju tom:

```
submenu_headings[0] = new Array();
```

Eller menar du att Näringslära, Fettförbränning och Ordlista skall visas i den andra \<select\>:en då Mat & Träning väljs? I sådana fall:

```
submenu_mids[0] = new Array();
submenu_mids[1] = new Array();
submenu_mids[2] = new Array();
submenu_mids[3] = new Array('5', '6', '11');
submenu_headings[0] = new Array();
submenu_headings[1] = new Array();
submenu_headings[2] = new Array();
submenu_headings[3] = new Array('N&auml;ringsl&auml;ra', 'Fettf&ouml;rbr&auml;nning', 'Ordlista A-&Ouml;');
```

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

## #9 — addeweb, 2007-10-04T18:08Z

Ja, det var ju meningen att det skulle bli så. Än funkar det inte. Jag har också testat med att undanta första elementet i arrayen för rubriken "Ej valt" med så här.

```
var submenu_mids = new Array();
var submenu_headings = new Array();

submenu_mids[0] = 0; 
submenu_headings[0] = "Ej valt";

submenu_mids[1] = new Array();
submenu_mids[2] = new Array('5', '6', '11');
submenu_mids[3] = new Array();
submenu_mids[4] = new Array();
submenu_headings[1] = new Array();
submenu_headings[2] = new Array('N&auml;ringsl&auml;ra', 'Fettf&ouml;rbr&auml;nning', 'Ordlista A-&Ouml;');
submenu_headings[3] = new Array();
submenu_headings[4] = new Array();
```

 
Det händer fortfarande att rubriken "Mat & Träning" ibland inte får underrubrikerna medan "Om mig" istället får dessa rubriker. Byter jag till annan toppmenyrubrik t.ex "Personlig träning" i första boxen ligger undermenyrubrikerna kvar i andra boxen.

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

## #10 — Peter S, 2007-10-04T18:34Z

Med

```
var submenu_mids = new Array();
var submenu_headings = new Array();
submenu_mids[0] = new Array();
submenu_mids[1] = new Array();
submenu_mids[2] = new Array();
submenu_mids[3] = new Array('5', '6', '11');
submenu_headings[0] = new Array();
submenu_headings[1] = new Array();
submenu_headings[2] = new Array();
submenu_headings[3] = new Array('N&auml;ringsl&auml;ra', 'Fettf&ouml;rbr&auml;nning', 'Ordlista A-&Ouml;');

function populate( id, theForm ){
	theForm.child_of.options.length = submenu_mids[id].length+1;
	for(i=0; i<submenu_mids[id].length; i++){
		theForm.child_of.options[i+1].text = submenu_headings[id][i];
		theForm.child_of.options[i+1].value = submenu_mids[id][i];	
	}
}
```

...visas Näringslära m.fl. när Mat & Träning väljs.

Anledningen till att de fortfarande ligger kvar i den andra \<select\>:en om t.ex. Personlig Träning väljs, är att du ej lagt till några submenu_mids och submenu_headings för dem -- endast för de fyra första valen finns arrayvärden definierade.

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

## #11 — addeweb, 2007-10-04T19:30Z

Nu förstår jag inte vad du menar. Alla menyrubriker hämtas från en databas MySQL och sorteras i viss ordningsföljd.

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

## #12 — Peter S, 2007-10-05T11:08Z

Du har åtta \<option\>:s i den första \<select\>:en, men endast fyra arrays definierade som värden för dessa. Dessa fyra är submenu_mids och submenu_headings med index 0-3.

För att var och en av de åtta alternativen skall påverka den andra \<select\>:en, gör du bäst i att skapa arrays som motsvarar dem alla -- alltså submenu_mids och submenu_headings med index 4-7.

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

## #13 — addeweb, 2007-10-05T11:40Z

Ojdå! Jag såg i källkoden att de 4 extra starttaggarna \<option\> som finns där nu borde istället vara sluttaggar \</option\>.

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

## #14 — addeweb, 2007-10-05T20:12Z

Problemet är nu löst. De båda selectboxarna fungerar fint. Det var fel på \<option\>-taggarna, \<option\> som sluttagg istället för \</option\>.

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

---

Tråden på webben: https://www.webforum.nu/amne/javascript/165066-använda-två-selectboxar
