我注意到在运行PhantomJS但在Chrome,Firefox和IE中偶尔失败的单元测试时会出现一种奇怪的行为。简而言之:
element.focus()
,但是监听器没有运行。element.focus()
实际上是在监听器上运行。不幸的是,我无法在小提琴中重现这个问题,但可以在jQuery的网站上完成。我在Chrome上执行以下步骤:
$("input[name=s]").on("focus", () => console.log("a"));
。$("input[name=s]").focus();
。没有生成输出。$("input[name=s]").focus();
。现在,“a”首次打印到控制台!是什么导致了这个问题,我该如何解决它?
答案 0 :(得分:2)
快速浏览jquery源代码,似乎焦点实际上使用了focusin,并且代码正试图映射到focusin。所以如果你试试这个:
$(“input [name = s]”)。on(“focusin”,()=> console.log(“a”));
。$( “输入[名称= S]”)的focusIn();
它会起作用。焦点和焦点在冒泡之间存在差异:
http://api.jquery.com/focusin/
当focusin事件或其中的任何元素发送到该元素时,它将被发送到该元素 它,获得焦点。这与焦点事件不同 支持检测父元素上的焦点事件(换句话说, 它支持事件冒泡)。
似乎行为是一个难以复制的错误,这必定是由其他位置的代码(可能是lib)引起的。虽然上面的代码应该有助于解决它。