代码之家  ›  专栏  ›  技术社区  ›  icecub

将焦点元素放在焦点更改上

  •  0
  • icecub  · 技术社区  · 5 年前

    我正试图记录下最后一个有焦点的文本输入元素。我的代码:

    document.addEventListener('focus', function(e) {
        var obj = document.activeElement;
        if(obj instanceof HTMLInputElement && obj.type == 'text'){
            console.log('true');
        }
    }, false);
    

    console.log(obj); 它对body元素的触发很好,但没有其他地方。除此之外,它似乎只触发一次。我不知道我做错了什么,也不知道这是不是正确的做法。所以我希望你们能帮我。

    注意:我知道使用click事件可以很容易地解决这个问题,但是任何使用Tab浏览表单元素的人都会遇到问题。所以这不是解决办法。

    1 回复  |  直到 5 年前
        1
  •  2
  •   epascarello    5 年前

    您可以使用window绑定并允许冒泡,然后您将获得带有target的元素。

    window.addEventListener('focus', function(e) {
        if (e.target.id) console.log(e.target.id)
    }, true);
    <input type="text" id="tb1">
    <input type="button" id="btn1" value="button">
    <a href="#foo" id="link1">test</a>