2015-11-12 49 views
0

我有一個全屏Google地圖,然後我有一個彈出窗口。我想要的是彈出消失,當我點擊任何東西,但彈出或如果我按esc。取消綁定jquery事件只能工作一次

下面的代碼只能運行一次。我可以打開彈出窗口並關閉它,但不會再打開。

var hideBlogContent = function() { 
     $(document).on('click', function (e) { 
      if ($(e.target).closest($("#blogpost")).length === 0) { 
       $("#blogpost").hide(); 
       $(document).unbind(); 
       $(document).off(); 
      } 
     }); 

     $(document).on('keydown', function (e) { 
      if (e.keyCode === 27) { // ESC 
       $("#blogpost").hide(); 
       $(document).unbind(); 
       $(document).off(); 
      } 
     }); 

我該如何讓它每次都能工作?

+0

爲什麼你要解綁事件呢? –

+0

,這樣我就可以再次打開彈出窗口。否則會在打開它時隱藏帖子? –

+0

您可能想要將函數包裝在相應的包裝函數中,並在需要時調用它,如果您仍想每次解除綁定但確保只解除當前事件(如$(document).unbind('click'); – DinoMyte

回答

1

使用命名空間,check the documentation for on()以查看更多..目前您的.off()函數正在關閉文檔上的所有綁定。但是對於命名空間,您可以關閉特定的事件綁定。

$(document).on('click.closeMap', function (e) { 
     if ($(e.target).closest($("#blogpost")).length === 0) { 
      $("#blogpost").hide(); 
      $(document).off('click.closeMap'); 
     } 
    }); 

$(document).on('keydown.closeMap', function (e) { 
    if (e.keyCode === 27) { // ESC 
     $("#blogpost").hide(); 
     $(document).off('keydown.closeMap'); 
    } 
}); 

此外,unbind()這裏是多餘的。