Unbind jquery事件只能运行一次

时间:2015-11-12 18:49:01

标签: javascript jquery

我有一个全屏谷歌地图,然后我有一个弹出窗口。我想要的是当我点击除弹出窗口之外的任何内容或者按下esc时弹出窗口消失。

以下代码只能运行一次。我可以打开弹出窗口然后关闭它,但它不会再打开。

   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();
            }
        });

我怎样才能让它每次都有效?

1 个答案:

答案 0 :(得分: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()此处是多余的。