JS 调度事件

JS dispatch event

我正在尝试使用 js 调度事件关注具有给定索引的 link:

var link = document.querySelector(".navbar-nav > li:nth-child(" + index + ") > a");
var event = new Event("focus");
link.dispatchEvent(event);

上面的代码无法运行,而 jQuery 版本运行正常:

$(".navbar-nav > li:nth-child(" + index + ") > a").focus();

我正在测试最新的Chrome。 JS版本有什么问题?

如果要设置焦点,那么调用dom元素的focus method就可以了

function setFocus(index) {
  var link = document.querySelector(".navbar-nav > li:nth-child(" + index + ") > a");
  link.focus()
}
<ul class="navbar-nav">
  <li><a href="#">1</a></li>
  <li><a href="#">2</a></li>
  <li><a href="#">3</a></li>
  <li><a href="#">4</a></li>
</ul>
<button onclick="setFocus(1)">1</button>
<button onclick="setFocus(2)">2</button>
<button onclick="setFocus(3)">3</button>
<button onclick="setFocus(4)">4</button>

调度事件不会设置焦点,只会触发附加的事件处理程序。

在 jQuery 中,调用 focus() 方法将触发事件,如果需要,还将调用本机行为方法,这就是它起作用的原因