【问题标题】:can't seem to get mootools 1.4.1 to trigger a <DIV> to appear似乎无法让 mootools 1.4.1 触发 <DIV> 出现
【发布时间】:2011-11-22 02:14:39
【问题描述】:

我正在尝试获取下面的代码来执行一旦用户将鼠标悬停在链接上就会触发的事件。我希望触发的事件是,一旦用户将鼠标悬停在链接上,DIV 就会出现,一旦用户将鼠标移离菜单,就会消失。 (它应该用于顶级导航上的子菜单。)然而,'mouseover' 事件被触发,而不是 'mouseout' 事件。这让我有点困惑。

function menuBehavior() {
  var subMenu = $$('.has_menu').getChildren('A')[0];

  window.addEvent('domready', 
      function() {
          subMenu.addEvent('mouseover', 
                function()  {
                    this.getSiblings('.menu-level_2').addEvent('mouseover', 
                        function(e) {
                            this.getSiblings('.menu-level_2').setStyle('opacity', 1);
                            e.stop();
                    });

                    this.getSiblings('.menu-level_2').addEvent('mouseout', 
                        function(e) {
                            this.getSiblings('.menu-level_2').setStyle('opacity', 0);
                            e.stop();
                        });
                });
    });
} // end of FUNCTION menuBehavior

这里也是菜单布局的 HTML。

<li class="menu-option has_menu">
    <a href="#option1"><span class="menu-arrow">Menu Option #1</span></a>
        <div class="menu-level_2">
            <ul class="level_2">
                <li class="more">
                    <a href="#sub_menu1"><span class="menu_level_2-more">Sub Menu Option #1</span></a>
                    <div class="bumper">
                        <div class="menu-level_3">
                            <ul class="level_3">
                                <li>
                                    <a href="#sub_menu1"><span class="menu_level_3">Sub Menu Option #1</span></a>
                                </li>
                                <li class="option-spcr">&nbsp;</li>
                                <li>
                                    <a href="#sub_menu1" class="menu_level_3"><span>Sub Menu Option #2</span></a>
                                </li>
                            </ul>
                        </div>
                    </div>
                </li>
                <li class="option-spcr">&nbsp;</li>
                <li>
                    <a href="#sub_menu1" class="menu_level_2"><span>Sub Menu Option #2</span></a>
                </li>
                <li class="option-spcr">&nbsp;</li>
                <li>
                    <a href="#sub_menu1" class="menu_level_2"><span>Sub Menu Option #3</span></a>
                </li>
                <li class="option-spcr">&nbsp;</li>
                <li>
                    <a href="#sub_menu1" class="menu_level_2"><span>Sub Menu Option #4</span></a>
                </li>
                <li class="option-spcr">&nbsp;</li>
                            <li>
                                <a href="#sub_menu1" class="menu_level_2"><span>Sub Menu Option #5</span></a>
                </li>
            </ul>
        </div>
    </li>

提前感谢您对如何修复此代码的任何想法或见解。

【问题讨论】:

    标签: mootools javascript-framework mootools-events


    【解决方案1】:

    首先,这一切都可以通过 CSS 完成,但是您需要对标记进行大量更改。

    如果你坚持你在 mootools 上的路径,代码看起来更像:

    window.addEvent('domready', function(){
        $$('.has_menu > a').each(function(el){
            el.addEvents({
                'mouseover': function(e) {
                    el.getFirst('div').setStyle('opacity', 1);
                },
                'mouseout': function(e) {
                    el.getFirst('div').setStyle('opacity', 0);
                }
            });
        })
    });
    

    但是,根据您的 HTML 标记,这将不起作用,因为您将在输入 DIV 后立即将鼠标移出 A 标记

    您最好删除 div 并将事件附加到 LI 标签,并让 UL 标签出现在 MOUSEENTER 上,并在 MOUSELEAVE 上隐藏 UL 标签

    我希望你能指出正确的方向

    【讨论】:

    • 感谢您的回复。我会重新编写 HTML,但菜单系统是基于 Joomla 如何为菜单创建代码的,因此我无法真正将 HTML 改造成更简洁的方法来生成菜单。我主要希望使用mootools,因为我希望使用框架淡入DIV。我暂时放弃了它,但如果我能用这种新方法来工作,我可能会回到它。再次感谢。
    • 快速提问。 $$('.has_menu > a').each(function(el){ 引用是指 LI.more 标签正下方的 A 还是 UL.level_2 标签中的所有 A 标签?跨度>
    • 正确的直接子选择器
    • 您也可以使用此标记,您需要将事件附加到 LI 标签而不是 A 标签,尽管使用 mouseenter/leave 使 div 的行为符合您的预期
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2011-11-30
    • 2015-09-20
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多