我有一个jQuery扩展/插件,它将keydown事件绑定到$(document)
。当我将内联弹出窗口加载到我的页面时,我需要取消绑定某些事件,然后在它关闭时再次绑定它们。
到目前为止,我所做的是使用$._data($(document)[0], "events");
获取有界事件,然后将其与.off()取消绑定。这一切都按预期工作,但当我尝试再次绑定它时它不起作用 - 事件仍未解除。
以下代码似乎有什么问题?
// 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]);
}
}
});
}