It is possible, but requires mixing JS and CFML when the template builds the page. This is the example I placed in the Shared Snippets for my programmers to use as an expamle. If there is a better way, I'd sure like to know it, since it has the potential to get very large with larger queries.
Hope this helps.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Dropdown Sample</title>
<cfscript>
pets = QueryNew("parent_id, parent, child_id, child"

;
QueryAddRow(pets,6);
QuerySetCell(pets,"parent_id",1,1);
QuerySetCell(pets,"parent","Dogs",1);
QuerySetCell(pets,"child_id",1,1);
QuerySetCell(pets,"child","Spot",1);
QuerySetCell(pets,"parent_id",1,2);
QuerySetCell(pets,"parent","Dogs",2);
QuerySetCell(pets,"child_id",2,2);
QuerySetCell(pets,"child","Butch",2);
QuerySetCell(pets,"parent_id",1,3);
QuerySetCell(pets,"parent","Dogs",3);
QuerySetCell(pets,"child_id",3,3);
QuerySetCell(pets,"child","Jaws",3);
QuerySetCell(pets,"parent_id",1,4);
QuerySetCell(pets,"parent","Dogs",4);
QuerySetCell(pets,"child_id",4,4);
QuerySetCell(pets,"child","Sparkee",4);
QuerySetCell(pets,"parent_id",2,5);
QuerySetCell(pets,"parent","Cats",5);
QuerySetCell(pets,"child_id",5,5);
QuerySetCell(pets,"child","Fluffey",5);
QuerySetCell(pets,"parent_id",2,6);
QuerySetCell(pets,"parent","Cats",6);
QuerySetCell(pets,"child_id",6,6);
QuerySetCell(pets,"child","Mittens",6);
</cfscript>
<script language="JavaScript">
<!--
<!--- This Javascript was added by Dan S on 6/3/00, GO Pacers!! --->
<cfoutput>
function childObject(parnt,chld,data) {
this.parent = parnt;
this.child = chld;
this.data = data;
}
kids = new Array(#Evaluate(pets.recordcount)#);
<cfset rcount=0>
<cfloop query="pets">kids[#rcount#]= new childObject(#parent_id#,#child_id#,"#child#"

;<cfset rcount=rcount+1>
</cfloop>
function fillChild() {
for (k = document.forms[0].child_select.options.length; k >= 0; k--) {
document.forms[0].child_select.options[k] = null;
}
for(i=0; i<#rcount#; i++) {
for(j=0; j<document.forms[0].parent_select.length && !document.forms[0].parent_select.options[j].selected; j++);
if (document.forms[0].parent_select.options[j].value == kids
.parent) {
newItem = document.forms[0].child_select.options.length;
document.forms[0].child_select.options[newItem] = new Option(kids.data);
document.forms[0].child_select.options[newItem].value = kids.child;
if (document.forms[0].child_select.options.length == 1)
document.forms[0].child_select.options[newItem].selected = true;
}
}
}
</cfoutput>
//-->
</script>
</head>
<body onload="fillChild()">
<form>
Type of Pet:
<select name="parent_select" onchange="fillChild()">
<cfoutput query="pets" group="parent_id">
<option value="#parent_id#">#parent#
</cfoutput>
</select><br>
Pet Names:
<select name="child_select">
<option value="0">(temp)
</select>
</form>
</body>
</html>