骨干:'按键'事件处理程序依赖于div的tabindex?

时间:2013-06-10 12:33:20

标签: javascript twitter-bootstrap backbone.js

我有一个Backbone视图,它包含了Bootstrap的模态。在那个观点上,我试图让Esc键关闭模态,但无论它是否有效,似乎取决于<div>的{​​{1}}属性的存在:

tabindex

var ModalView = Backbone.View.extend({ el: '#modalOverlay', // is an existing container for modals events: { 'keypress': function(event) { ... } }, initialize: function(options) { // the view pattern this.compiledTemplate = Handlebars.compile(yesNoQuestionAlertTemplate); this.options = options; this.render(options); }, }); 包含yesNoQuestionAlertTemplate属性,该属性定义了对转义键的正确处理。当我删除属性时,escape不起作用,当我把它放回去时,处理程序被正确触发。

tabindex

为什么存在这种奇怪的依赖?

1 个答案:

答案 0 :(得分:3)

keypress事件的目标只能是可以有焦点的元素。输入元素默认情况下可以具有焦点。要使任何其他HTML元素具有焦点,您需要为其指定tabindex属性。

当一个元素获得焦点时,该事件会在DOM中冒泡并在所有父元素上触发。所以你必须选择:

  • 您应该为元素指定tabindex属性。
  • bodywindow上捕捉该事件,因为它们是所有元素的父母。