javascript:事件通过ajax加载页面后多次执行。

时间:2011-07-18 13:25:14

标签: javascript jquery

我创建了一个将通过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。

5 个答案:

答案 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]);
        });