2013-12-12 36 views
1

我为我的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.stopPropagation()之后加e.preventDefault()就行了。没有它,一旦jquery事件调度程序逻辑完成,快捷号码将被输入到输入中,但是不会。

+0

你可以检查'e.keyCode> = 48 && e.keyCode <= 90',以确保它是0-9或A-Z? –

+0

你是什么意思,“按键时没有视图”?它只是隐藏在DOM中吗?然后,您可以删除'autofocus'属性,并在出现输入时使用javascript设置焦点。 – claustrofob

回答

0

它看起来像调用e.preventDefault()的伎俩,即使我还是很想找到。一天到底为什么这种有差别。