jquery li ul子菜单问题

jquery li ul子菜单问题,jquery,slidetoggle,jquery-hover,Jquery,Slidetoggle,Jquery Hover,我有一个问题,我想制作一个jquery子菜单,如下所示: <ul id="submenu" class="menu"> <li class="item-1"><a href="test.html">Test 1</a></li> <li class="item-2 deeper parent"> <a href="test.html">Test 2</a>

我有一个问题,我想制作一个jquery子菜单,如下所示:

    <ul id="submenu" class="menu">
    <li class="item-1"><a href="test.html">Test 1</a></li>
    <li class="item-2 deeper parent">
        <a href="test.html">Test 2</a>
        <ul>
            <li class="item-xy"><a href="#">Test 1</a></li>
            <li class="item-xy"><a href="#">Test 1</a></li>
            <li class="item-xy"><a href="#">Test 1</a></li>
        </ul>
    </li>
    <li class="item-3 deeper parent">
        <a href="test.html">Test 3</a>
        <ul>
            <li class="item-xy"><a href="#">Test 1</a></li>
            <li class="item-xy"><a href="#">Test 1</a></li>
            <li class="item-xy"><a href="#">Test 1</a></li>
        </ul>
    </li>
    <li class="item-4"><a href="test.html">Test 4</a></li>
    <li class="item-5"><a href="test.html">Test 5</a></li>
</ul>

$("li.deeper ul").hide();
$("ul#submenu li.deeper").hover(function(event){
    var myClass = $(this).attr("class");
    var ulcl = myClass.replace("deeper parent","");
    event.stopPropagation();
    $("."+ulcl+" ul").slideToggle();
});   
$(“li.ul”).hide(); $(“ul#子菜单li.deep”)。悬停(函数(事件){ var myClass=$(this.attr(“类”); var ulcl=myClass.replace(“较深的父级”,即“”); event.stopPropagation(); $(“+ulcl+”ul”)。滑动切换(); });
它可以工作,但有时如果你用鼠标靠近li项目, 子项开始冒泡。 你可以在这里看到:

有人能帮我吗


谢谢

您的
li
元素显示为块,因此它们占据了整个屏幕的宽度。 通过css减小其宽度,或仅使用以下变体:

$("li.deeper ul").hide();
$("ul#submenu li.deeper > a").hover(function(event){
    var myClass = $(this).parent().attr("class");
    var ulcl = myClass.replace("deeper parent","");
    event.stopPropagation();
    $("."+ulcl+" ul").slideToggle();
});

我在选择器中添加了一个
,并将
$(this.attr(“class”)
更改为
$(this.parent().attr(“class”)
它会冒泡,因为当它开始滑动时,您会得到另一个mouseout事件,这会再次触发切换。所以,添加一些标志

你的构造有点奇怪,为什么不呢

var myClass = $(this).attr("class");
var ulcl = myClass.replace("deeper parent","");
$("."+ulcl+" ul").slideToggle();
不用

if(!isSliding) {
    isSliding = true;
    $(this).find("ul").slideToggle(function(){isSliding = false;});
}
?


您引用的代码与您在此处发布的代码不同。

您确定fiddle属于您的问题吗?