繁体   English   中英

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

[英]How to pass event object to the event handler

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

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

但是在这种情况下,我将很难解除绑定该特定处理程序的操作。

请给我建议一种方法。

这可以:

$(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 defined错误e is not defined 尝试将jQuery版本替换为1.7+然后使用.on()方法。

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

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

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

正如NOX所指出的,问题可能出在您使用的是jQuery 1.9,而其中的live已被删除。 尝试更换liveon

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM