如何将事件对象传递给事件处理程序

时间:2013-06-12 05:42:25

标签: javascript jquery events

我正在附加文件按键事件,如

$(document).live("keypress",myObject.onDocumentKeyPress);

我的处理程序实现是

onDocumentKeyPress:function(e){
              if(e.keyCode == 13) { //Enter keycode
                    myobject.onColumnOptionClick(null,true);
             }
        }

现在在这个函数中我得到了e is not defined

如何将事件对象传递给事件处理程序?

我得到了一个建议

$(document).live("keypress",function(e){
    myObject.onDocumentKeyPress(e);
});

但在这种情况下,我会发现很难解开那个特定的处理程序。

请建议我。

2 个答案:

答案 0 :(得分:4)

这很好:

$(document).on("keypress",function(e){
    myObject.onDocumentKeyPress(e);
});

  

你说:但在这种情况下,我会发现很难解开那个特定的处理程序。

要解除绑定,请在附加事件处理程序时使用命名空间

$(document).on("keypress.something",function(e){
    myObject.onDocumentKeyPress(e);
});

现在您可以使用该命名空间取消绑定事件处理程序:

$(document).off("keypress.something");
  • .live()在1.7版中已弃用,已在1.9版中删除。请改用.on()

参考文献:

  • .on() - jQuery API文档

正如 @adeneo 在评论中所说,该事件总是自动传递:

$(function () {
    var o = {
        f: function (e) {
            alert(e.keyCode);
        }
    }

    $(document).on("keypress", o.f);
});

您可以查看jsFiddle demo。所以问题出在其他地方你会得到错误e is not defined。尝试使用1.7+替换您的jQuery版本并使用.on()方法。

答案 1 :(得分:2)

var myobject = {
  onDocumentKeyPress: function (e) {
    console.log('Event ', e);
  }
};

$(document).live('keypress', myobject.onDocumentKeyPress);

这将确实将e作为事件对象。

正如NOX所指出的,问题可能在于你使用的是jQuery 1.9,其中删除了live。尝试将live替换为on