Hello everyone,
I’m creating a sort of search/sort thing using XML and List Boxes. It’s three list boxes, when a selection in the first is chosen, it populates the second box based on the choice, and then when a choice is made in the 2nd box it populates the third based on that choice. The choices are being pulled from an XML doc.
I’m so close to having it working. I can get the first to populate the 2nd but not the 2nd to 3rd. I know it’s just something with the syntax, how I’m referencing the node I need and how I’m using the listener. It’s all running together in my head at this point. :-/
This is in Flash 8.
Here’s my AS:
var RootNode:XMLNode;
var selectedCategory:String; // formerly selectedGallery
var selectedCompany:String;
var categoryPosition:Number; // formerly photoPosition
var companyPosition:Number;
var CategoryNode:XMLNode; // formerly GalleryNode
//var OptionNode:XMLNode; // formerly PhotoNode
var CompanyNode:XMLNode;
var searchXML:XML = new XML();
searchXML.ignoreWhite = true;
searchXML.onLoad=loadSearch;
searchXML.load("searchBoxes.xml");
stop();
var CBOListener:Object = new Object();
CBOListener.change = loadGallery;
search_lb.addEventListener("change", CBOListener);
var companyListener:Object = new Object();
companyListener.change = loadCompany;
selection_lb.addEventListener("change", companyListener);
// the below function calls the loadCombo function after successfully
// loading the XML file
function loadSearch(success:Boolean):Void{
if (success) {
RootNode = this.firstChild;
loadCombo();
}
else {
trace("Error in loading XML file");
}
if (success) {
RootNode = this.firstChild;
loadSecondC();
}
else {
trace ("Error loading second box");
}
}
function loadCombo():Void {
var galleryName:String;
search_lb.addItem("-- Search by--");
for (var i:Number=0; i< RootNode.childNodes.length; i++) {
galleryName = RootNode.childNodes*.attributes.categoryName;
search_lb.addItem(galleryName);
}
}
function loadSecondC():Void {
var galleryName:String;
company_lb.addItem("-- Company--");
for (var i:Number=0; i< RootNode.firstChild.firstChild.childNodes.length; i++) {
galleryName = RootNode.firstChild.firstChild.childNodes*.attributes.optionname;
company_lb.addItem(galleryName);
}
}
function loadGallery(evtObj:Object):Void {
var galleryName:String;
if (evt.Obj.target.selectedItem.label !="-- Search by--") {
selectedCategory = evtObj.target.selectedItem.label;
for (var i:Number=0; i< RootNode.childNodes.length; i++) {
galleryName = RootNode.childNodes*.attributes.categoryName;
if (galleryName == selectedCategory) {
CategoryNode = RootNode.childNodes*;
categoryPosition = 0;
loadPhoto(categoryPosition);
break;
}
}
}
}
function loadCompany(evtObj:Object):Void {
var galleryName:String;
if (evt.Obj.target.selectedItem.label !="-- Choose One--") {
selectedCompany = evtObj.target.selectedItem.label;
for (var i:Number=0; i< RootNode.childNodes.length; i++) {
galleryName = RootNode.firstChild.childNodes*.attributes.optionname;
if (galleryName == selectedCompany) {
CompanyNode = RootNode.firstChild.childNodes*;
companyPosition = 0;
loadCompanyName(companyPosition);
break;
}
}
}
}
function loadPhoto(nodePos:Number):Void {
var galleryName:String;
selection_lb.addItem("-- Choose One--");
for (var i:Number=0; i< CategoryNode.childNodes.length; i++) {
galleryName = CategoryNode.childNodes*.attributes.optionname;
selection_lb.addItem(galleryName);
}
}
function loadCompanyName(nodePos:Number):Void {
var galleryName:String;
company_lb.addItem("-- Choose Company--");
for (var i:Number=0; i< CompanyNode.firstChild.childNodes.length; i++) {
galleryName = CompanyNode.firstChild.childNodes*.attributes.optionname;
company_lb.addItem(galleryName);
}
}
And a snippet of my XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<searchList>
<category categoryName="Name">
<firstOption optionname="A - D">
<secondOption optionname="Abba">
</secondOption>
<secondOption optionname="Brown">
</secondOption>
<secondOption optionname="Darcy">
</secondOption>
</firstOption>
<firstOption optionname="E - J">
<secondOption optionname="Evans">
</secondOption>
<secondOption optionname="Green">
</secondOption>
<secondOption optionname="Jackson">
</secondOption>
</firstOption>
So when the category “Name” is clicked in the first box, the choices “A-D, E - F” and so on show up in the second. Then when “A-D” is clicked the names Abba, Brown and Darcy should show up in the third. This is where it breaks.
Any suggestions or tips would be greatly appreciated! :thumb2: