Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从视图中捕获关键事件?_Javascript_Javascript Events_Backbone.js - Fatal编程技术网

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”内