2012-10-19 49 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

相關問題