为什么该密钥处理程序在没有警报的情况下不能工作?

时间:2019-01-30 02:40:36

标签: javascript jquery twitter-bootstrap

我正在使用Bootstrap button plugin将复选框列表呈现为按钮。除了使用空格键“单击”按钮外,这非常有用。 Bootstrap示例的默认行为是,在按空格将焦点放在复选框按钮之一上时,标签会收到“活动”类,但实际上不会选中复选框元素。我添加了以下javascript,以便在按下空格键时以编程方式单击标签。如果我在某个地方甚至在处理程序的末尾放置了警报,它也会按预期工作。在没有警报的情况下,空格键不会切换按钮状态或选中复选框。

<script>
    $(function() {
        window.onkeydown = function(event) {
            if(event.keyCode === 32 && $(event.target).hasClass('cabin-cb')) {
                //alert('hi'); 
                event.preventDefault();
                //alert('hi');
                $(event.target).closest('label').click();
                //alert('hi');
            }
        };            
    });
</script>

1 个答案:

答案 0 :(得分:0)

在诸如超时处理程序之类的事件中触发“ click”事件,以使其在事件运行后发生

  setTimeout(function() {
    $(event.target).closest('label').click();
  }, 1);

您也可以使用Promise.resolve()requestAnimationFrame()来完成;关键是在键盘处理完成后才发生“点击”。