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