,如果你的目标是最终得到一个事件在3级发射了在choice,简化像这样:
(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级刚刚1个选择,它不会引发变化 - 所以你真的应该保持你知道的最后一个好的面包屑的状态,例如混合。
http://jsfiddle.net/dimitar/mxaB5/2/
经由被委派每选择类型的单个事件处理程序
。我希望它能给你一些想法 - 你最终可以用2个函数来存储你需要的任何数据。
你的一部分问题是,第二级下拉列表可以引用在dom中没有表示形式的div和select的值。
我有很多东西需要学习,但是这个窍门! - 有没有什么好的消息来源可以让我知道更多关于这个东西的知识?你会推荐什么?正如你从我现有的代码中看到的那样 - 我是一个JS虚拟人物 - 但是很想得到它的舒适程度。 – Hanny
好吧 - 我会说,你的第一目标应该退后一步,看看编程模式。你现在已经可以工作了,所以现在它需要改变你的心态,抽象你的任务,将重复的重复组合到函数或者方法或者类中,这些重用可以在你的应用中或者在不同的应用中重复使用和重用。请查看SO上关于mootools标签的链接,以及谷歌Aaron Newton谈到的“使用mootools进行模式编程”(IIRC),它应该给你一些想法。 –
有没有办法让这个代码在1.2.5下工作?我不能使用1.2.5.1('更多'功能)。但是这个代码在1.2.5库中不起作用(UGH !!!)。 http://jsfiddle.net/mxaB5/7/ 我在文档中查找,它看起来像'继电器'不是1.2.5的选项 - 如何不使用该方法的最佳方法? – Hanny