如果在pageload上激发Jquery mouseenter事件,则该事件将挂起

如果在pageload上激发Jquery mouseenter事件,则该事件将挂起,jquery,freeze,mouseenter,Jquery,Freeze,Mouseenter,我在一些元素上使用jquerys mouseenter/mouseleave函数 在Mouseenter上,一些内容通过ajax加载,并向elemet添加一个菜单。鼠标移动时,菜单消失 如果在页面呈现时悬停元素,菜单有时不会消失。它们保持可见。我不能用演示代码复制这个 有什么建议吗?.data()可能有问题吗 我认为问题在于,在设置了p.data('loaded',true)后,您无法切换可见状态,因为p.data('loaded')==true签入切换菜单 移动逻辑,以便始终切换可见性,但仅加

我在一些元素上使用jquerys mouseenter/mouseleave函数

在Mouseenter上,一些内容通过ajax加载,并向elemet添加一个菜单。鼠标移动时,菜单消失

如果在页面呈现时悬停元素,菜单有时不会消失。它们保持可见。我不能用演示代码复制这个

有什么建议吗?.data()可能有问题吗


我认为问题在于,在设置了
p.data('loaded',true)
后,您无法切换可见状态,因为
p.data('loaded')==true
签入
切换菜单

移动逻辑,以便始终切换可见性,但仅加载一次内容:

toggleMenu: function(p,i){
    if( p.data('visible') === true ){ 
        i.stop(true,true).fadeOut('fast'); 
        p.removeClass('fadet').data('visible',false);  
    } 
    else{ 
        i.stop(true,true).fadeIn('fast'); 
        p.addClass('fadet').data('visible',true);   
    }
},

smallMenu: function(a){
    var p = $(this), cid = parseFloat( p.data('id') ), i = p.find('.channel-dropdown');

    // Always toggle the menu visibility.
    channels.toggleMenu(p,i);

    // But only load the content once.
    if( p.data('loaded') === true ){ return false; }
    p.addClass('fadet').data('loaded',true).data('visible',true);
    var s = $.post( channels.vars.details, { id: cid } );
    s.done(function(data){ channels.menuTemplate( data, cid ).appendTo(p).stop(true,true).fadeIn('fast'); });
}

内容只加载一次,但代码更干净。错误仍然发生。有些东西有用。add/removeClass('fadet')可以工作。fadeIn(),fadeOut()的东西没有。页面加载,运行很多JS,在执行此操作时,一些悬停的元素保持菜单可见,有时悬停效果是相反的,在悬停时隐藏在左边显示…好的。我想我明白了。加载内容时,这需要一些时间,加载后会调用fadeIn。这与页面加载无关。加载后,它会淡入菜单。无论是否悬停..在此行中:s.done(函数(数据){channels.menuTemplate(数据,cid).appendTo(p).stop(true,true).fadeIn('fast');});我需要检查容器是否具有类fadet。如果没有,请不要淡入。将其转换为纯css解决方案。将JS降低约60%。
toggleMenu: function(p,i){
    if( p.data('visible') === true ){ 
        i.stop(true,true).fadeOut('fast'); 
        p.removeClass('fadet').data('visible',false);  
    } 
    else{ 
        i.stop(true,true).fadeIn('fast'); 
        p.addClass('fadet').data('visible',true);   
    }
},

smallMenu: function(a){
    var p = $(this), cid = parseFloat( p.data('id') ), i = p.find('.channel-dropdown');

    // Always toggle the menu visibility.
    channels.toggleMenu(p,i);

    // But only load the content once.
    if( p.data('loaded') === true ){ return false; }
    p.addClass('fadet').data('loaded',true).data('visible',true);
    var s = $.post( channels.vars.details, { id: cid } );
    s.done(function(data){ channels.menuTemplate( data, cid ).appendTo(p).stop(true,true).fadeIn('fast'); });
}