自动对焦输入以某种方式捕捉到按键

Autofocus input somehow catching a keypress?

本文关键字:方式捕 输入      更新时间:2023-09-26

我正在为我的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();
},

这很好,除了选择题后面紧接着是一个简短的回答题的情况。在这种情况下,用于包含元素的相同<div>被替换为:

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

问题就在这里:无论我在键盘上用什么快捷方式来回答多选题,都会显示在中,就好像用户已经输入了一样,尽管在按键时该视图并不存在。我试着在"输入键"上连接一个事件,但在这种情况下甚至不会发生。有趣的是,取消自动对焦可以解决这个问题,但不幸的是,为了让用户体验愉快,我需要它。

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

编辑:看起来就像是在e.stopPropagation()完成任务之后添加e.preventDefault()。如果没有它,jquery事件调度程序逻辑一完成,快捷方式编号就会被键入到输入中,但不会很快。

看起来调用e.preventDefault()就可以了,尽管我仍然希望有一天能找出为什么这会有所不同。