如何在打开模态时停止触发TAB键事件

时间:2018-01-22 13:23:42

标签: javascript html css angular ngx-bootstrap

当模式显示时,如何禁用TAB等关键事件?我在页面上的表单中有多个按钮和字段,可以通过Tab键选择(聚焦)。我想在模态显示时禁用它。该应用程序使用Angular,而modal在子组件中。

<button tabindex="0">Button1</button>
<button tabindex="0">Button2</button>
<form>...</form>

<div id="myModal" class="modal fade" role="dialog">
  <div class="modal-dialog">
    <div class="modal-content">...</div>
  </div>
</div>

4 个答案:

答案 0 :(得分:4)

您可以添加自己的事件监听器:

// Your event listener
function preventTab(e) {
  e = e || window.event;
  if (e.keyCode === 9) { // If tab key is pressed
    e.preventDefault() // Stop event from its action
  }
}

// Call this when modal window opens
document.addEventListener(preventTab);

// Call this when modal window closes/unmounts
document.removeEventListener(preventTab);

答案 1 :(得分:3)

我建议这样的事情 - 使用Renderer2并监听keydown事件并通过keyCode过滤事件。然后在模态隐藏中删除该侦听器。

Nothing

一个小例子 - https://github.com/firephp/firephp-for-firefox-devtools

答案 2 :(得分:0)

您可以通过preventDafault禁用keydow上的keyCode 9(选项卡)选项卡:

$(document).keydown(function(e) {
    if (e.keyCode == 9) {
        e.preventDefault();
    }
});

当然,你会想要在模态开启器上而不是那样,所以它不会永久禁用标签;)

答案 3 :(得分:0)

尝试使用此代码时,只有在显示模态时才会禁用Tab键。

 $(document).keydown(function(e){
    if (e.which==9) // keycode for tab key
    {
        checkmodal = $('#myModal').is(':visible'); //check modal is opened or not
        if (checkmodal){
            e.preventDefault();
        }
    }
});