按键事件无效的原因

why keypress event is not worked?

本文关键字:无效 事件      更新时间:2023-09-26

请帮助解决问题。我制作模板,查看并运行它们。

html:

<div class="space" id="space"></div>

tpl:

<script type="text/template" id="spaceTpl">
  <div class="container main_container">
    <div class="row">
    gfdgdfgdfg<br>gfdgdfgdfg<br>gfdgdfgdfg<br>gfdgdfgdfg<br>gfdgdfgdfg<br>gfdgdfgdfg<br>gfdgdfgdfg<br>gfdgdfgdfg<br>
    </div>      
  </div>
</script>

视图:

window.APP = window.APP || {};
APP.SpaceView = Backbone.View.extend({  
  initialize: function() {   
    this.render();
  },    
  template: _.template($('#spaceTpl').html()),
  render: function() {    
    this.$el.html(this.template());  
    return this;
  }, 
  events: {
    'click': 'move',
    'keypress': 'move',
    'keydown': 'move'
  }, 
  move: function(e) {  console.log(222)
    var code = e.keyCode || e.which;
    if (code === 13) {
      console.log('sdsd');
    }
  }     
});

init:

var app = new APP.SpaceView({el: '#space'}); 

按下控制台显示屏"222"中的任意键后需要。但什么也没发生。

即按键处理程序不工作。为什么?

https://jsfiddle.net/9t1cwfrv/16/

如果您将其设置为在聚焦元素上使用,它就会起作用。如果您不想聚焦,可以在body元素或document上使用它。

演示:https://jsfiddle.net/9t1cwfrv/21/

在您的模板集tabindex="1"

<div class="container main_container" tabindex="1" >

https://jsfiddle.net/4ga489zy/1/

keypresskeydown在元素未聚焦的情况下将不起作用。

它在输入中是有意义的,或者你可以尝试在文档元素上设置它:

$(document).on('keypress', function(e){
    var code = e.keyCode || e.which;
    console.log(e, code); 
});

主干input示例:

var Input = Backbone.View.extend({
  tagName: 'input',
  events: {
    'keypress': 'press'
  },
  press: function(e){
    var code = e.keyCode || e.which;
    console.log( code );
  }
});
(new Input()).$el.appendTo( document.body );
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.2.3/backbone-min.js'></script>