如何检查我的元素ID是否具有焦点?

Kod*_*_12 65 html javascript jquery

假设我有以下div在满足某个条件后获得焦点:

<div id="myID" tabindex="-1" >Some Text</div>
Run Code Online (Sandbox Code Playgroud)

我想创建一个处理程序,检查该div是否具有焦点,当它评估为true/focus在div上时,执行某些操作(在下面的示例中,打印控制台日志):

if (document.getElementById('#myID').hasFocus()) {
            $(document).keydown(function(event) {
                if (event.which === 40) {
                    console.log('keydown pressed')
                }
            });
        }
Run Code Online (Sandbox Code Playgroud)

我在控制台中收到一条错误消息:

TypeError:无法读取null的属性'hasFocus'

知道我在这里做错了吗?也许我传递div Id的方式?

Flo*_*rie 114

document.activeElement与要检查焦点的元素进行比较.如果它们是相同的,则元素是集中的; 否则,它不是.

// dummy element
var dummyEl = document.getElementById('myID');

// check for focus
var isFocused = (document.activeElement === dummyEl);
Run Code Online (Sandbox Code Playgroud)

hasFocus是的一部分document; DOM元素没有这样的方法.

另外,在开头document.getElementById不使用a .改变这个:#myID

var dummyEl = document.getElementById('#myID');
Run Code Online (Sandbox Code Playgroud)

对此:

var dummyEl = document.getElementById('myID');
Run Code Online (Sandbox Code Playgroud)

如果您想使用CSS查询,则可以使用querySelector(和querySelectorAll).

  • 多么雄辩的解决方案!在过去的两个小时里,我一直在为此苦苦挣扎. (4认同)

Mic*_*ael 13

如果你想使用jquery $("..").is(":focus").

你可以看看这个堆栈


Oen*_*n44 12

使用 document.activeElement

应该管用.

PS getElementById("myID")没有getElementById("#myID")

  • 也可以使用`document.querySelector("#myID")`代替 (4认同)

Eih*_*waz 5

这是一个块元素,为了使其能够获得焦点,您需要向其添加tabindex属性,如下所示:

<div id="myID" tabindex="1"></div>
Run Code Online (Sandbox Code Playgroud)

Tabindex将允许该元素获得焦点。使用tabindex="-1"(或实际上,完全摆脱该属性)来禁止这种行为。

然后您可以简单地

if ($("#myID").is(":focus")) {...}
Run Code Online (Sandbox Code Playgroud)

或使用

$(document.activeElement)
Run Code Online (Sandbox Code Playgroud)

如前所述。