2011-08-10 38 views
0

FIDDLEMooTools的 - 需要編輯下拉菜單的名稱中獲取價值

試圖讓警報第三下拉後閃光,但是他們不會。 我在表單中使用這3個下拉菜單。第一個和第二個下拉列表適當地提交它們的值 - 第三個下拉列表沒有 - 因爲它沒有得到適用於下拉列表的正確名稱。

我不知道爲什麼最後的警報不會觸發 - 所以任何輸入爲什麼會有很大的幫助。

我撒在警報中,以便我知道我通過JavaScript獲得了多少,但最後幾個警報不會觸發。

我是一個總的JavaScript白癡。我認爲我理解得越多,我似乎就能做得越少 - 所以幫助表示讚賞。

回答

1

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

+0

我有很多東西需要學習,但是這個竅門! - 有沒有什麼好的消息來源可以讓我知道更多關於這個東西的知識?你會推薦什麼?正如你從我現有的代碼中看到的那樣 - 我是一個JS虛擬人物 - 但是很想得到它的舒適程度。 – Hanny

+1

好吧 - 我會說,你的第一目標應該退後一步,看看編程模式。你現在已經可以工作了,所以現在它需要改變你的心態,抽象你的任務,將重複的重複組合到函數或者方法或者類中,這些重用可以在你的應用中或者在不同的應用中重複使用和重用。請查看SO上關於mootools標籤的鏈接,以及谷歌Aaron Newton談到的「使用mootools進行模式編程」(IIRC),它應該給你一些想法。 –

+0

有沒有辦法讓這個代碼在1.2.5下工作?我不能使用1.2.5.1('更多'功能)。但是這個代碼在1.2.5庫中不起作用(UGH !!!)。 http://jsfiddle.net/mxaB5/7/ 我在文檔中查找,它看起來像'繼電器'不是1.2.5的選項 - 如何不使用該方法的最佳方法? – Hanny