我正在附加文件按键事件,如
$(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);
});
但在这种情况下,我会发现很难解开那个特定的处理程序。
请建议我。
答案 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
。