【问题标题】:Lock tab key with javascript?用javascript锁定tab键?
【发布时间】:2011-05-03 15:09:26
【问题描述】:

如何使用javascript锁定或禁用tab键?

【问题讨论】:

  • 你需要这样做的目的是什么?
  • 锁定/禁用 Tab 键是什么意思?您的意思是如何防止 TAB 键将焦点转移到下一个可聚焦元素?
  • 下面的答案很好,但让我警告你,大多数用户不会喜欢你阻止他们使用他们的标签。就我而言,如果不是为了游戏,我会尽快离开网站。
  • Google 文档是一个很好的禁用标签的非游戏示例。选项卡实际上就像一个选项卡,不会转移焦点。
  • @DarinDimitrov 一个很好的用例是,如果您正在执行类似 Block UI 的操作,即阻止用户执行任何操作直到操作完成或创建模式对话框。

标签: javascript jquery


【解决方案1】:
$(document).keydown(function(objEvent) {
    if (objEvent.keyCode == 9) {  //tab pressed
        objEvent.preventDefault(); // stops its action
    }
})

【讨论】:

  • 这样就可以了 又打开了?我可以使用任何选择器代替 $(document)
  • @psygnosis,简短回答: :-)
  • 最后一个问题 iPhone safari 浏览器有下一个和上一个按钮.. 就像工作选项卡键.. 但是这个代码在 iphone 下一个按钮上不起作用.. 我该怎么做?
  • 如何恢复?
  • 还原@prgmrDev 的内容?
【解决方案2】:

你可以这样做:

$(":input, a").attr("tabindex", "-1");

这将禁止在所有链接和表单元素中使用选项卡获得焦点。

希望对你有帮助

【讨论】:

  • @psygnosis $(":input, a").removeAttr("tabindex");
【解决方案3】:

Naftali aka Neal's answer 上进行扩展,下面是您使用 vanilla JS 以及启动和停止 Tab 行为按钮的方法:

let stopTabFunction = function(e) {
  if (e.keyCode == 9) {
    e.preventDefault();
  }
};
document.getElementById('stopTabButton').onclick = function() {
  document.addEventListener('keydown', stopTabFunction);
};
document.getElementById('resumeTabButton').onclick = function() {
  document.removeEventListener('keydown', stopTabFunction);
};
<input type="text"/>
<input type="text"/>
<input type="text"/>
<input type="text"/>
<input type="text"/>
<input type="text"/>
<br/><br/>
<input type="button" id="stopTabButton" value="Stop Tab!"/>
<input type="button" id="resumeTabButton" value="Resume Tab!"/>

请注意,这也适用于 Shift + Tab(反向)。

JSFiddle


但是,就我而言,我想要稍微不同的行为:我想基本上将 Tab 焦点锁定到单个 div。为此,我在它之前和之后放置了一个div,同时给了它们tabindex="0"div 本身的文档定义的标签顺序),以使div 的外边缘可聚焦,例如所以:

<div id="beforeMyDiv"></div>
<div id="myDiv">
  <!-- Only want Tab indexing to occur in here! -->
</div>
<div id="afterMyDiv"></div>

然后,我把之前的函数改成了这个:

//Get the div's into variables etc.
//...

let forceTabFocusFunction = function (e) {
    if (e.keyCode == 9) {
        //Force focus onto the div.
        if (!myDiv.contains(document.activeElement)) {
            if (e.shiftKey) {
                afterMyDiv.focus();
            } else {
                beforeMyDiv.focus();
            }
        }
    }
};

效果很好。

【讨论】:

    【解决方案4】:

    关于尼尔的回答,我只想补充:

    if (objEvent.keyCode == 9) {  //tab pressed
        return;
    }
    

    因为当你输入完 CPF 并按 TAB 时,它会被视为一个字符并更改为 CNPJ 掩码。

    完整代码:

    <script type="text/javascript">
    $(document).ready(function() {
        $("#cpfcnpj").keydown(function(objEvent){
            if (objEvent.keyCode == 9) {  //tab pressed
                return;
            }
            try {
                $("#cpfcnpj").unmask();
            } catch (e) {}
    
            var size= $("#cpfcnpj").val().length;
    
            if(size < 11){
                $("#cpfcnpj").mask("999.999.999-99");
            } else {
                $("#cpfcnpj").mask("99.999.999/9999-99");
            }                   
        });
    });
    </script>
    

    【讨论】:

    • 请用英文写下你的答案。Stack Overflow 是一个只有英文的网站,所有问题和答案都必须是英文。
    • 翻译成英文。
    • 仍然没有意义。大声笑
    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多