Javascript 自动对焦输入是否捕捉到按键?

Javascript 自动对焦输入是否捕捉到按键?,javascript,javascript-events,jquery,Javascript,Javascript Events,Jquery,我正在为我的MVC web应用程序实现几个快捷键,我遇到了一个问题。该应用程序允许用户回答多项选择题或简短回答问题,我只需按1、2、3、4等键即可回答多项选择题。以下是我现在的答案: $(document).on("keypress", function (e) { self.someKeyPressed(e); }); [...] someKeyPressed: function(e) { // locate all the multiple choice buttons in

我正在为我的MVC web应用程序实现几个快捷键,我遇到了一个问题。该应用程序允许用户回答多项选择题或简短回答问题,我只需按1、2、3、4等键即可回答多项选择题。以下是我现在的答案:

$(document).on("keypress", function (e) {
  self.someKeyPressed(e);
});

[...]

someKeyPressed: function(e) {

  // locate all the multiple choice buttons in this view
  var buttons = this.$el.find('button');

  if(_.contains(_.range(49,55), e.which) && buttons.length) {
    index = e.which - 49;
    var answer = $(buttons[index]).text();
    this.answerQuestion(answer);
  }

  e.stopPropagation();
},
这很好,除了选择题后面紧接着是一个简短的回答问题的情况。在这种情况下,用于包含元素的相同的
将替换为:

<input placeholder="answer goes here" autofocus="autofocus">

这里的问题是:无论我在键盘上使用什么快捷键来回答多项选择题,都会显示在屏幕上,就好像用户输入了一样,即使在按键时不存在该视图。我试图在“输入按键”上连接一个事件,但在这种情况下,这个事件甚至没有发生。有趣的是,删除自动对焦解决了这个问题,但不幸的是,我需要它才能让用户体验愉快

这是怎么回事?在我准备好之前,我能做些什么来防止按键进入输入


编辑:它看起来像是在
e.stopPropagation()
完成操作之后添加了
e.preventDefault()
。如果没有它,jquery事件分派器逻辑一完成,快捷键号码就会输入到输入中,但不会很快。

看起来调用
e.preventDefault()
就可以了,即使有一天我仍然很想知道为什么这会产生不同。

你可以检查
e.keyCode>=48&&e.keyCode“按键时视图不存在”是什么意思?它只是隐藏在DOM中吗?然后可以删除
autofocus
属性,并在输入出现时使用javascript设置焦点。