Javascript jQuery:获取绑定事件,取消绑定并再次绑定

Javascript jQuery:获取绑定事件,取消绑定并再次绑定,javascript,jquery,Javascript,Jquery,我有一个jQuery扩展/插件,它将keydown事件绑定到$(文档)。当我将内联弹出窗口加载到我的页面时,我需要解除某些事件的绑定,然后在关闭时再次绑定它们 到目前为止,我所做的是使用$获取有界事件。\u data($(document)[0],“events”)然后使用解除绑定。到目前为止,一切都按预期进行,但当我再次尝试绑定它们时,它不起作用-事件仍然没有绑定 以下代码似乎有什么问题 // This code runs when popup is clicked var keydownEv

我有一个jQuery扩展/插件,它将keydown事件绑定到
$(文档)
。当我将内联弹出窗口加载到我的页面时,我需要解除某些事件的绑定,然后在关闭时再次绑定它们

到目前为止,我所做的是使用
$获取有界事件。\u data($(document)[0],“events”)然后使用解除绑定。到目前为止,一切都按预期进行,但当我再次尝试绑定它们时,它不起作用-事件仍然没有绑定

以下代码似乎有什么问题

// This code runs when popup is clicked
var keydownEventsNamespace = [];
var keydownEvents = []; 
var events = $._data($(document)[0], "events");
if(typeof events.keydown !== \'undefined\') {                 
    $.each(events.keydown, function() {
        if ("" != $(this)[0]["namespace"]) {
            keydownEventsNamespace.push($(this)[0]["namespace"]);
            keydownEvents.push($(this)[0]);
        }
    });

    $.each(keydownEventsNamespace, function(index, value) {
        for (var i = 0; i < $("table.sort_navigate").length; i++) {
            var table = "navigator" + i;
            var keydownEventName = "keydown." + table;

            if (table == value) {
                // Unbind event!
                $(document).off(keydownEventName);

                // Bind again (later to be put in another place)
                $(document).on(keydownEvents[index]);
            }
        }                            
    });
}
//单击弹出窗口时运行此代码
var keydownEventsNamespace=[];
var keydownEvents=[];
var事件=$。_数据($(文档)[0],“事件”);
if(typeof events.keydown!=\'undefined\'){
$.each(events.keydown,function(){
如果(“!=$(此)[0][“命名空间”]){
push($(this)[0][“namespace”]);
keydownEvents.push($(this)[0]);
}
});
$.each(keydownEventsNamespace,函数(索引,值){
对于(var i=0;i<$(“table.sort\u导航”).length;i++){
var table=“navigator”+i;
var keydownEventName=“keydown.”表;
如果(表==值){
//解除绑定事件!
$(文档).off(keydownEventName);
//再次捆扎(稍后放在另一个地方)
$(文档).on(keydownEvents[index]);
}
}                            
});
}

fiddle或plunker将有助于取消绑定事件(这取决于内部实现细节),也许您可以让事件处理程序检查是否存在弹出窗口,并在出现弹出窗口时退出?@FrédéricHamidi是的,这可能是一个更好的主意。虽然知道我的代码失败的原因会很好,
$(document).on(keydownEvents[index])
只传递一个事件名,而不是处理程序。看起来您一开始并没有保存事件处理程序。