2011-08-10 37 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