2012-10-19 50 views
0

我有一个相当简单的导航菜单,打开并关闭点击。菜单行为仅在浏览器视口低于特定大小时才起作用。jquery点击事件并不总是在浏览器调整大小后触发

这一切在90%的时间内都很有效。剩下的10%的时间(当我向客户展示它时,natch)点击事件根本不会触发。据我所知,这个问题只发生在浏览器被重新调整了几次之后,但是当窗口被调整大小时它通常会正常工作,所以很难找到它发生的原因。

代码:

var smallViewport = false; 

$(document).ready(function(){ 
    if($(window).width() < 520) { 
     smallViewport = true; 
    } 

    if(smallViewport == true) { 
     $('nav.main').click(function(){ 
      console.log(' + clicky clicky'); 
      if($(this).find('.level-1').hasClass('open') == true) { 
       $(this).find('.level-1').slideUp('fast').removeClass('open'); 
      } else { 
       $(this).find('.level-1').slideDown('fast', function(){ $(this).addClass('open'); }); 
      } 
     }) 
    } 
}); 

$(window).resize(function() { 

    if($(window).width() < 520) { 
     smallViewport = true; 
    } else { 
     smallViewport = false; 
    } 
    console.log(smallViewport); 

    if(smallViewport == true) { 
     $('.level-1').removeClass('open').css('display','none'); 
    } else { 
     $('.level-1').css('display','block'); 
    } 

}); 

当问题选择表现出来,在执行console.log(smallViewport)大小调整功能输出“真”时,它应该是真的,单击事件只是拒绝与火闪它。

有没有人遇到过类似的问题?我错过了任何明显的解决方案?

+0

您使用哪个浏览器进行测试?什么是你的jQuery版本...? – bodi0

回答

2

在页面加载时,而不是当它调整

如果$(window).width() < 520评估在页面加载虚假你只是结合的点击,点击事件将不绑定 - 这就是为什么你的控制台日志是正确的但事件并非如此

+0

这不是一个答案,所以把它作为评论。 – 2619

+2

看起来像我的回答 –

+0

是的,绝对是一个答案 - 都是!接受这一个,因为蒂姆先到那里,并提高两者。谢谢大家。 – hollsk

2

将视口检查放入单击事件处理程序中。就像现在一样,如果在页面加载时检查的结果为false,则事件处理程序不会被绑定。尝试将其更改为:

$('nav.main').click(function(){ 
    if(smallViewport == true) { 
     console.log(' + clicky clicky'); 
     if($(this).find('.level-1').hasClass('open') == true) { 
      $(this).find('.level-1').slideUp('fast').removeClass('open'); 
     } else { 
      $(this).find('.level-1').slideDown('fast', function() { 
       $(this).addClass('open'); 
      }); 
     } 
    } 
}​);​ 
+0

'smallViewport'必须重新评估才能正常工作,而不仅仅是重新测试。 – jbabey

+0

为什么?它应该已被'$(window).resize'评估和更新,不是吗? – st3inn

+0

我明白了,你是对的。 – jbabey

相关问题