0

我正在附加一个文档按键事件,例如

$(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);
});

但在这种情况下,我会发现很难解除绑定该特定处理程序。

请给我一个方法。

4

2 回答 2

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 演示。所以问题出在你得到错误的其他地方e is not defined1.7+尝试用and use.on()方法替换您的 jQuery 版本。

于 2013-06-12T05:45:02.543 回答
2
var myobject = {
  onDocumentKeyPress: function (e) {
    console.log('Event ', e);
  }
};

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

这将并且确实e作为事件对象获得。

正如 NOX 指出的那样,问题可能是您使用 jQuery 1.9,其中live已删除。尝试替换liveon.

于 2013-06-12T05:58:02.953 回答