2014-03-25 29 views
0

我在某些元素上使用jquery mouseenter/mouseleave函数。如果在页面加载时Jquery mouseenter事件挂起

在Mouseenter上有些内容通过ajax加载并向elemet添加菜单。在mouseleave上,菜单消失。

如果我在页面渲染时悬停这些元素,有时候这些元素不会消失。他们保持可见。我无法用演示代码重现此内容。

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

$(document).on('mouseenter', '._hoverflow', channels.smallMenu); 
$(document).on('mouseleave', '._hoverflow', channels.smallMenu); 

toggleMenu: function(p,i){ 
    if(p.data('loaded') === true ){ 
     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); 
     } 
     return true; 
    } return false; 
}, 
smallMenu: function(a){ 
    var p = $(this), cid = parseFloat(p.data('id')), i = p.find('.channel-dropdown'); 
    if(channels.toggleMenu(p,i)){ 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'); }); 

}, 

回答

1

我认为这个问题是你已经设置后p.data('loaded', true)你不能切换,因为在你的toggleMenu检查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'); }); 
} 
+0

内容加载只有一次,但你的代码是干净。错误仍然发生。有些事情工作。 add/removeClass('fadet')起作用。 fadeIn(),fadeOut()的东西不。页面加载后,运行很多JS,同时这样做的一些元素徘徊保持菜单​​可见,有时悬停效果相反,隐藏悬停显示离开... – user2429266

+0

好的。我想我明白了。东西被加载,这需要一些时间,加载后调用fadeIn。这与页面加载没有任何关系。它在加载后淡入菜单。无论是否徘徊.. – user2429266

+0

在这一行:s.done(function(data){channels.menuTemplate(data,cid).appendTo(p).stop(true,true).fadeIn('fast'); }); 我需要检查容器是否具有淡化类。如果不是不会淡入。 – user2429266

相关问题