代码之家  ›  专栏  ›  技术社区  ›  Viktor Sec

如何在不真正聚焦元素的情况下触发焦点处理程序?

  •  1
  • Viktor Sec  · 技术社区  · 6 年前

    jquery的启用方式如下:

    $( "input" ).triggerHandler( "focus" );
    

    如果没有jquery,我如何实现相同的目标?

    https://api.jquery.com/triggerHandler/

    2 回复  |  直到 6 年前
        1
  •  1
  •   Tim Klein    6 年前

    你用 dispatchEvent 在你想要的元素上 focus 被触发。见 文件和一个例子 here .

    const event = new FocusEvent('focus', {
      view: window,
      bubbles: true,
      cancelable: true
    });
    
    const myInput = document.getElementById('myInput');
    
    myInput.dispatchEvent(event);
    #myInput:focus {
      background: red;
    }
    <input id="myInput" type="text" onfocus="console.log('Input focused!');"/>

    从上面的代码中可以看到 console.log 语句基于 input 标记,但元素实际上没有聚焦(因为否则输入框将是红色的,您可以单击它来尝试)。

        2
  •  0
  •   Sergej    6 年前

    使用 getEventListeners(node) 功能

    就你而言: console.log(getEventListeners(document.getElementsByTagName('input')[0]));

    您将获得所有的侦听器,然后可以筛选那些附加到 focus 事件