Med javascript så og arrayet bliver lavet med ASP:
<%
set conn = server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("db9.mdb")
%>
<html>
<head><title>Select menu vælger sekundær select menu.</title>
<META NAME="Generator" CONTENT="Stone's WebWriter 3">
<script language="JavaScript"> <!--
var selbokse = new Array();
selbokse['land'] =
new Array( "- vælg amt -"
<%
strSQL = "SELECT * FROM amter WHERE landeID = 1"
set rs = conn.execute (strSQL)
do while not rs.eof
Response.Write ", """ & rs("amtNavn") & """"
rs.movenext
loop
%>
);
//selbokse['land'] =
// new Array ( "- vælg Amt -", "København", "Aarhus", "Odense" ), // Danmark
// forhvert madsted skal databasen generere en url og et navn
selbokse['madsted'] =
new Array(
<%
strSQL = "SELECT * FROM amter WHERE landeID = 1"
set rs = conn.execute (strSQL)
do while not rs.eof
%>
new Array ( "- vælg madsted -"
<%
strSQL = "SELECT * FROM restaurant WHERE amtID = " & rs("id")
set rsMad = conn.execute(strSQL)
do while not rsMad.eof
Response.Write ", """ & rsMad("link") & "|" & rsMad("restaurantnavn") & """"
rsMad.movenext
loop
rs.Movenext
%>)<%
if NOT rs.EOF then response.write ","
loop
%>
);
//selbokse['madsted'] =
// new Array(
// new Array ( // selbokse['madsted'][0][0] for Danmark,København.
// "- vælg Restaurant -",
// "
www.restaurant-cassiopeia.dk/|Cassiopeia",
// "
www.dentatoveredeenke.dk/|Den Tatoverede Enke",
// "
www.egoisten.dk/|Egoisten",
// "
www.restaurant-kanalen.dk/|Kanalen",
// "
www.krogs.dk/|Krogs Fiskerestaurant"
// ),
// new Array ( // selbokse['madsted'][0][1] for Danmark,Aarhus.
// "-1|- vælg Restaurant -",
// "
www.rold.dk/|Rold Storkro",
// "
www.spiseguiden.dk/luneborg/|Luneborg Kro",
// "home10.inet.tele.dk/ihj/|Hotel Plesner Skagen",
// "
www.spiseguiden.dk/glvraaslot/|Gl. Vraa Slot",
// "
www.pandrupkro.dk/index.htm|Pandrup Kro"
//
// ),
// new Array ( // selbokse['madsted'][0][2] for Danmark,Odense.
// "-1|- vælg Restaurant -",
// "
www.le-provence.dk/Le Provence",
// "
www.skaerven.dk/|skaerven",
// "
www.majorgaarden.com/|Majorgården"// )
// );
var offMenu = new Array( " \< - \< - \< - \< - \< -" ); // >
var sel;
var selo;
function setOption( idx, data ) {
var tmp = data.split("|");
if ( tmp.length == 1 ) { tmp[1]=tmp[0]; tmp[0]="" };
if ( selo.length > idx ) {
selo[idx].text = tmp[1];
selo[idx].value = tmp[0];
} else
selo[idx] = new Option( tmp[1], tmp[0] );
}; //end setOption( number, string, string )
function setupMenu( selobj, menuarray ) {
//alert("menuarray type: " +typeof(menuarray) );
sel = selobj.selectedIndex;
selo = selobj.options;
for (var i=0; menuarray.length>i; i++ ) setOption( i, menuarray[i] );
selobj.selectedIndex = 0;
selobj.disabled = ( menuarray==offMenu )?true:false;
selo.length = menuarray.length;
}; //end setupMenu( select object, array )
var idxLand = -1; // intet land valgt
function setMenu ( frm, selNavn ) {
if ( selNavn == "" ) {
setupMenu( frm.land, selbokse['land'] );
setupMenu( frm.madsted, offMenu );
idxLand = -1;
} else
if ( selNavn == 'land' ) {
idxLand = frm.land.selectedIndex-1;
if ( idxLand >= 0 )
setupMenu( frm.madsted, selbokse['madsted'][idxLand] );
else
setupMenu( frm.madsted, offMenu );
} else
if ( selNavn == 'madsted' && idxLand>=0 ) {
var helurl = "
http://" + frm.madsted.options[frm.madsted.selectedIndex].value;
window.open( helurl, 'winduesnavn' );
} else
alert( "Slem programfejl. du bør aldrig se denne besked." );
}; //end setMenu ( radioKnap element )
// --> </script>
</head>
<body onload="setMenu( document.sfrm, '' )">
<p><form name="sfrm" action="dest_fil.asp" onsubmit="return pakResultat(this);">
<center><table border=0 cellspacing=10>
<tr>
<td valign='top'>
<select name="land" width="200px" style="width:200px"
onchange="setMenu(this.form, this.name);">
<option value=1>- - - - - - - - - - - -</option>
<option value=2> </option>
<option value=3> </option> <!-- indsæt toppe options af hensyn til NS4.x -->
<option value=4> </option>
<option value=5> </option>
<option value=6> </option>
<option value=7> </option>
<option value=8> </option>
<option value=9> </option>
<option value=10> </option>
</select>
</td>
<td valign='top'>
<select name="madsted" width="200px" style="width:200px"
onfocus="if (0>idxLand) this.blur();"
onchange="if (this.selectedIndex>0) setMenu(this.form, this.name);">
<option value=1>- - - - - - - - - - - -</option>
<option value=2> </option>
<option value=3> </option>
<option value=4> </option>
<option value=5> </option>
<option value=6> </option>
<option value=7> </option>
<option value=8> </option>
<option value=9> </option>
<option value=10> </option>
</select>
</td>
</tr>
</table></center>
</form>
<p>Bemærk at datamængden stiger exponentielt. Her med blot 3 valgmuligheder i hver select skal der loades 3*3 = 9 restaurantlinier. Med 6 valg i hver gruppe bliver tallet 6*6 = 36 restaurantlinier.
<p>Det kan blive så mange linier der skal hentes at det går hurtigere at hente ny data fra serveren for hvert valg.
<p>Især hvis du laver <A HREF="exp145224.html">flere niveauer</A> af selectbokse.</p>
<p align='right'><!-- WebWriter AutoDato -->Opdateret: 3.1.2002<!-- WW -->
</body>
</html>
I den combo box med linket skal en option i arrayet se såan her ud:
"
www.rold.dk/page.asp|Rold Storkro",
Det bliver lavet i denne linie:
Response.Write ", """ & rsMad("link") & "|" & rsMad("restaurantnavn") & """"