webForumDet fria alternativet

Ska optgroups/options med PHP / MySQL

1 svar · 376 visningar · startad av MickeA.com

MickeA.comMedlem sedan feb. 20034 528 inlägg
#1

Hej,

Försöker skapa en dynamiskt selectlista där alla options ska delas in i grupper.
Resultatet behöver se ut såhär:

var selectMenu = getElemRefs("MySelectList");

var optgroup_x0 = document.createElement("optgroup");
optgroup_x0.label = "Grupper med start 6 - 2009";

var group_x0 = document.createElement("option");
group_x0.value = "3";
group_x0.appendChild(document.createTextNode("vecka 24 kl. 08.40-09.20"));
optgroup_x0.appendChild(group_x0);

var group_x1 = document.createElement("option");
group_x1.value = "4";
group_x1.appendChild(document.createTextNode("vecka 25 kl. 09.20-10.00"));
optgroup_x0.appendChild(group_x1);

if (optgroup_x0.hasChildNodes()) { selectMenu.appendChild(optgroup_x0); }

// nästa optgroup
var optgroup_x1 = document.createElement("optgroup");
optgroup_x1.label = "Grupper med start 7 - 2009";

var group_x2 = document.createElement("option");
group_x2.value = "3";
group_x2.appendChild(document.createTextNode("vecka 26 kl. 08.40-09.20"));
optgroup_x1.appendChild(group_x2);

var group_x3 = document.createElement("option");
group_x3.value = "4";
group_x3.appendChild(document.createTextNode("vecka 27 kl. 09.20-10.00"));
optgroup_x1.appendChild(group_x3);

if (optgroup_x1.hasChildNodes()) { selectMenu.appendChild(optgroup_x1); }

...

Koden ser för tillfället ut såhär:

if(!(mysql_num_rows($result) == false)){
			$curr_year  = 0;
			$curr_month = 0;
			$counter1	= 0;
			$counter2	= 0;
			while($res = mysql_fetch_assoc($result)){
				if(!($curr_year == $res['start_year']) || !($curr_month == $res['start_month'])){
					if($counter2 != 0){
						echo "if (optgroup_x" . $counter1 . ".hasChildNodes()) { selectMenu.appendChild(optgroup_x" . $counter1  . "); }\n\n";
					}
					echo "var optgroup_x" . $counter1 . " = document.createElement(\"optgroup\");\n";
					echo "optgroup_x" . $counter1 . ".label = \"Grupper med start " . $res['start_month'] . " - " . $res['start_year'] . "\";\n\n";
					$counter1++;
				}
				echo "var group_x" . $counter2 . " = document.createElement(\"option\");\n";
				echo "group_x" . $counter2 . ".value = \"" . $res['group_id'] . "\";\n";
				echo "group_x" . $counter2 . ".appendChild(document.createTextNode(\"" . $res['group_name'] . "\"));\n";
				echo "optgroup_x" . $counter1 . ".appendChild(group_x" . $counter2 . ");\n\n";
				$counter2++;

				$curr_year  = $res['start_year'];
				$curr_month = $res['start_month'];
			}
		}
		mysql_free_result($result);

Problemet är att mina två räknare räknar lite fel, så att "$counter1" får för högt värde då "nuvarande" optgroup ska populeras.

Har testat att flytta $counter1 / $counter2 till olika positioner, men det står still i huvudet.

Hur bör det se ut?

Tack!

MickeA.comMedlem sedan feb. 20034 528 inlägg
#2

Löste det genom:

if($counter2 != 0){
     echo "if (optgroup_x" . ($counter1 - 1) . ".hasChildNodes()) { selectMenu.appendChild(optgroup_x" . ($counter1 - 1)  . "); }\n";
}
Genererad på 366 ms · cache AV · v20260730165559-full.f96bc7eb