mouseover和mouseout事件触发儿童

Aba*_*don 6 javascript scriptaculous prototypejs dom-events drop-down-menu

代码:

<div id="Navigation" 
    onmouseover="new Effect.toggle('Drop_Down','slide',{duration: 0.8});" 
    onmouseout="new Effect.toggle('Drop_Down','slide',{duration: 0.8});">
    <div id="Drop_Down">
        <% include Navigation %>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

如果我鼠标悬停NavigationDrop_Down格下滑,如果我鼠标移开它向上滑动.

问题是,如果我将鼠标悬停在子Drop_Downdiv上,它也会向上滑动.

有谁知道我怎么能解决这个问题?

Cre*_*esh 11

在Prototype 1.6.1中使用mouseentermouseleave事件代替new(但在IE中不是新的).您必须从标记中移出内联事件处理程序才能执行此操作:

<div id="Navigation">
    <div id="Drop_Down">
        <% include Navigation %>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

并在脚本中设置事件:

<script>
document.observe('dom:loaded', function() {
    $('Navigation')
        .observe('mouseenter', function() {
            new Effect.toggle('Drop_Down','slide',{duration: 0.8})
        })
        .observe('mouseleave', function() {
            new Effect.toggle('Drop_Down','slide',{duration: 0.8})
        })
})
</script>
Run Code Online (Sandbox Code Playgroud)

mouseover和不同mouseout,这些事件不会从子元素中冒出来.他们被绑定到你绑定的确切元素,很好地解决了你的问题.