Javascript 如何从视图中捕获关键事件?
我试图从如下视图捕获关键事件:Javascript 如何从视图中捕获关键事件?,javascript,javascript-events,backbone.js,Javascript,Javascript Events,Backbone.js,我试图从如下视图捕获关键事件: myView = Backbone.View.extend({ el: $('#someDiv'), initialize: function(){ // initialize some subviews }, render: function(){ return this; }, events:{ 'keypress #someDiv': 'showKey' }, showKey: function(e){
myView = Backbone.View.extend({
el: $('#someDiv'),
initialize: function(){
// initialize some subviews
},
render: function(){
return this;
},
events:{
'keypress #someDiv': 'showKey'
},
showKey: function(e){
console.log(e.keyCode);
}
})
那不行吗
ps:视图或其子视图中没有[input]元素。我只需要知道用户是否按下任何键,然后在视图上执行某些操作。按下的键将转到页面上的焦点元素。如果视图中没有任何内容,并且视图没有任何焦点,则不会有任何按键事件 (顺便说一句,如果您想为this.el执行按键事件,请执行“按键”:“showKey”)
在上面的代码中,主体很可能会接收所有按键事件。您可以在view initialize()函数中执行此操作:
_.bindAll(this, 'on_keypress');
$(document).bind('keypress', this.on_keypress);
今天才发现:如果您的按键在chrome中不起作用,请使用“keydown”事件而不是keypress。将按键绑定到文档时要小心,当您删除视图时,它不会与其他事件解除绑定。删除视图时,还可以调用:$(document).unbind('keypress','on_keypress');当我删除视图时,我必须执行
$(document).unbind('keypress',this.on_keypress)
。与Grigg先生的答案几乎相同,但传递的是实际函数,而不是其名称的字符串。我使用了您的代码和工作,您需要记住的唯一一件事是,您要添加事件的元素必须位于“View el”内,例如,您要附加事件的元素必须位于“#someDiv”内