如何使用javascript在文本框上触发焦点事件?

Aja*_*y G 9 javascript focus eventtrigger

如何使用javascript在文本框上触发焦点事件?

例如在 jQuery 中,我们可以使用$('#textBox').focus().

同样,我们在纯 javascript 中有任何类似的触发器功能吗?

Gre*_*rdt 13

最后我不得不摆弄这个,并想出了一些似乎可以跨浏览器工作的东西:

function triggerFocus(element) {
    var eventType = "onfocusin" in element ? "focusin" : "focus",
        bubbles = "onfocusin" in element,
        event;

    if ("createEvent" in document) {
        event = document.createEvent("Event");
        event.initEvent(eventType, bubbles, true);
    }
    else if ("Event" in window) {
        event = new Event(eventType, { bubbles: bubbles, cancelable: true });
    }

    element.focus();
    element.dispatchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)

考虑到有的浏览器支持focusin事件,有的只支持focus事件。它使用本机focus函数设置焦点,然后根据浏览器支持的情况调度“focusin”事件或“focus”事件。

测试于:

  • 火狐 62
  • 铬 69
  • Internet Explorer 11(是的,是的。我知道。不过,我们必须在工作中支持它)
  • 微软边缘 15

并使用它:

var foo = document.getElementById("foo");

triggerFocus(foo);
Run Code Online (Sandbox Code Playgroud)

这是通用的,应该适用于任何可以接收焦点的元素。


kar*_*rns -1

非常简单:Element.focus()

这不会触发 onfocus 事件如果有要求,请参阅 Greg 的答案。

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus

http://jsfiddle.net/eekn6nb9/

  • 我想我知道为什么:“Element.focus()”不会触发“onfocus”事件,至少在我的测试中是这样。Greg 建议的 `dispatchEvent` 方法可以做到这一点。 (2认同)