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

时间:2013-12-12 21:54:28

标签: javascript javascript-events jquery

我正在为我的MVC网络应用程序实现几个快捷键,我遇到了一个问题。该应用程序允许用户回答多项选择或简答题,我想通过按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="answer goes here" autofocus="autofocus">

这就是问题所在:我在键盘上用来回答多项选择问题的快捷方式就像用户输入的那样出现,即使按键时该视图不存在。我尝试在“输入按键”上连接一个事件,在这种情况下甚至不会发生。有趣的是,删除自动对焦可以解决问题,但遗憾的是我需要它才能让用户体验愉快。

这里发生了什么?在我准备好之前,有什么办法可以阻止按键进入输入状态吗?

修改:在e.preventDefault()完成后,似乎正在添加e.stopPropagation()。没有它,只要jquery事件调度程序逻辑完成,就会在输入中输入快捷方式编号,但不久就会输入。

1 个答案:

答案 0 :(得分:0)

看起来调用e.preventDefault()就行了,尽管有一天我仍然想知道为什么这会产生影响。