Det kan laves men man skal havde tungen lige i munden... Jeg har lavet det eks du linker til. Jeg har være nød til at loop databse igenne to gange fro at først udskrive Amter og dernæst Resutranter.
Det er muligt det kan laves smatere men man skal jo havde bytte de forskellige array op..:
<%
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("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>