2015-11-12 47 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()这里是多余的。