javascript - 无法给予按钮元素焦点

标签 javascript html angular

我试图将焦点放在我的 Angular 2 应用程序中的以下按钮上:

<button (click)="confirmOk(modalId)" class="btn btn-default ok" id="ok-button" tabindex="0">
    <img src="/assets/shared/images/icon-ok.png" />
    {{okText}}
</button>

在页面上,我打开开发人员控制台 (F12) 并键入以下内容:

var e = document.getElementById("ok-button");

此时,它返回了我期望的元素,所以我知道 JavaScript 正在寻找按钮。然后我回到控制台并输入:

e.focus();

...按钮没有获得焦点。我知道它没有获得焦点,因为我有一个用于此按钮的 :focus 状态的 CSS 类,如果它获得焦点,它应该在按钮周围放置一个大的红色边框。当我手动单击按钮以使其获得焦点时,我确实可以看到那个红色按钮。

按照评论中的建议,我也尝试将这段代码添加到触发按钮出现在页面上的事件中:

showButton();  // the button is triggered to appear here
setTimeout(function() {
   let e = document.getElementById('ok-button');
   if (e) {
       e.focus();  // breakpoint here does indeed get triggered
   }
}, 2000)

不幸的是,这也没有用。

更新:这可能会有帮助。当我在浏览器上单击“刷新”时,目标按钮会在页面实际刷新之前暂时获得焦点。所以我的猜测是这与页面上的时间有关,或者可能是 Angular 重绘了页面?

最佳答案

问题只是在我试图集中注意力时控制台处于打开状态。即使我没有在控制台中输入内容,它也总是以某种方式偷走焦点。关闭控制台后,我尝试从代码而不是浏览器获取焦点,焦点已成功应用。

关于javascript - 无法给予按钮元素焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46890524/

相关文章:

HTML: "elements stacked up on top of one another"是什么

javascript - Dean Edwards 的 ie7-js 有多可行?

javascript - 嵌套启动中的 --watch 和 --debug 选项是什么

javascript - 如何在 MVC(AngularJS、HTML、PHP)中显示来自 SQL 数据库的特定数据

html - 为什么我的颜色类别没有应用于我的 <p> 文本?

css - 使用选择器在 2 个全局 SCSS 之间切换

javascript - 取消或停止递归 promise 链中的 $timeout

javascript - jQuery:获取内联样式而不是 body 的 CSS

angular - 选项卡选定索引内的垫选项卡不起作用

javascript - 在 Angular 中使用 setInterval 调用函数时无法读取未定义的属性