我有一个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
为什么存在这种奇怪的依赖?
答案 0 :(得分:3)
keypress
事件的目标只能是可以有焦点的元素。输入元素默认情况下可以具有焦点。要使任何其他HTML元素具有焦点,您需要为其指定tabindex
属性。
当一个元素获得焦点时,该事件会在DOM中冒泡并在所有父元素上触发。所以你必须选择:
tabindex
属性。body
或window
上捕捉该事件,因为它们是所有元素的父母。