,如果你的目標是最終得到一個事件在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