我创建了一个将通过ajax加载的页面。在这个页面上,我创建了一个函数,它将为指定的键分配一些函数[我正在使用jquery热键]。
这是我用来分配函数的函数
function setupKeys()
{
$.each(keyMap, function (event, listener_name){
$(document).bind('keydown', event, listener[listener_name]);
});
}
每次加载页面时都会执行此操作。
如果我是第一次加载页面并按回车键,则执行该功能。假设我是通过ajax再次加载页面而不是引用浏览器并按下回车键,该函数执行两次。我重复相同的功能将执行三次。
我该如何避免这种情况? keyMap是一个对象
keyMap = {
'Ctrl+s':'save_data',
'return':'test_return',
'tab':'test_return'
};
listener = new Array();
请帮忙。
[对不起英语不好]
Krish。
答案 0 :(得分:1)
为什么不在绑定前取消绑定事件?没有任何东西可以绑定,防止双重事件注册。
function setupKeys()
{
$.each(keyMap, function (event, listener_name){
$(document).unbind('keydown', listener[listener_name]);
$(document).bind('keydown', event, listener[listener_name]);
});
}
答案 1 :(得分:0)
您必须检查setupKeys是否已被执行。只需添加一个变量
var isSetupKeysCalled = false;
将在您的函数内设置为false
。
答案 2 :(得分:0)
在绑定事件之前尝试取消绑定事件,以确保事件不会在页面上多次出现。
$.each(keyMap, function (event, listener_name){
$(document).unbind('keydown').bind('keydown', event, listener[listener_name]);
});
答案 3 :(得分:0)
我无法用unbind方法解决问题。所以我修改了marc建议的功能。我认为它现在正在工作。
谢谢marc
答案 4 :(得分:0)
问题已解决!
因为我正在使用jquery热键后面的语法应该用于取消绑定事件
$.each(keyMap, function (event, listener_name){
$(document).unbind('keydown', event, listener[listener_name]);
$(document).bind('keydown', event, listener[listener_name]);
});