jQuery事件处理/传播/冒泡?

时间:2012-09-05 23:14:12

标签: javascript jquery html event-bubbling event-propagation

我正在尝试为网站创建一个菜单,我正在使用jQuery,我遇到了一个小问题。

我有这个结构

<div class="menuTitle menuDiv menuNode" id="menuNode_<?=$row_menu["id"]?>">
    <a href="<?=$rt?>" class="menuAnchor" onclick="return registerMenuClick($(this).parent())">
        <span><?=$nodeName?></span>
    </a>
</div>

<div class="menuSelect" id="menuSelect_<?=$row_menu["id"]?>" align="center"><?=$nodeName?></div>

在jQuery中,我有

$(document).ready(function(){
    $(".menuNode, .menuSelect").live("mouseover",function(event){
    MenuBar.selectedID = $(this).attr("id").replace("menuNode_","").replace("menuSelect_","");
    MenuBar.showThisBranch();
  }).live("mouseout",function(event){
    MenuBar.selectedID = $(this).attr("id").replace("menuNode_","").replace("menuSelect_","");
    MenuBar.hideThisBranch();
  });
})

当用户将鼠标悬停在menuNode上时,应显示menuSelect(确实如此),但如果我将鼠标悬停在menuAnchor或span上,则会触发mouseout事件,然后触发mouseover事件。

所以,如果说,我将鼠标移到menuNode上,然后移动到span,然后再转到menuNode,它将触发mouseover事件3次。我之前在点击事件上遇到过这种行为,但似乎用于解决此问题的方法无法解决此问题。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

正如@ Beetroot-Beetroot建议的那样,mouseenter / mouseleave有助于配合TimeOut从menuNode更改为menuSelect(输入时为300毫秒,休假时为500毫秒)。