если ваша цель в конечном итоге получить событие, запускаемое при выборе на уровне 3, упростите так:
(function() {
var level1 = document.getElements("div.style-sub-1"), level2 = document.getElements("div.style-sub-2");
var beer = document.id("beerStyle");
beer.addEvent("change", function() {
level1.setStyle("display", "none");
level2.setStyle("display", "none");
var val = this.get("value");
if (!val.length)
return;
document.id(this.get("value")).setStyle("display", "block");
});
// delegate the other selects
$(document.body);
document.body.addEvents({
"change:relay(div.style-sub-1 select)": function() {
// reset level 2
level2.setStyle("display", "none");
var val = this.get("value");
if (!val.length)
return;
var target = document.id(val);
if (target)
target.setStyle("display", "block");
},
"change:relay(div.style-sub-2 select)": function() {
alert("You chose: " + this.get("value"));
}
});
})();
проблема в том, что если на уровне 3 есть только один выбор, который выигралне вызвать изменения - так что вам действительно следует сохранять состояние последней хорошей крошки, о которой вы знаете, например, гибрид.
http://jsfiddle.net/dimitar/mxaB5/2/
с помощью одного обработчика событий для делегированного типа выбора.Я надеюсь, что это даст вам некоторые идеи - в конечном итоге вы можете работать всего с 2 функциями для хранения любых данных, которые вам нужны.
Часть вашей проблемы в том, что выпадающие списки 2-го уровня могут ссылаться на значения, которые не представлены в доменеформа div и выбор.