使用jQuery的.focus()在Mac上的Firefox中设置焦点

我试图让.focus()在Mac上的Firefox(版本33.1.1)中工作。 一些类似的问题提到了没有视觉效果的.focus()效果的解决方案; 在下面的每个测试中,我甚至都无法做到这一点。

下面列出的各种测试都适用于Chrome,但不适用于Firefox。 使用的HTML是:

  

设置tabindex是基于这个建议 ,但它似乎没有任何影响。

我也考虑使用autofocus ,但这不起作用,因为我需要在用户使用网页时操纵多个字段的焦点,而不仅仅是加载时的单个字段。

更新 : Rhumborl 在下面提出这个问题可能需要在使用iframe时对Firefox的焦点事件进行处理,这肯定是问题所在。 当您从JSFiddle的iframe“编辑小提琴”窗口中取出它而不是查看输出全屏时,以下每个测试都有效。 下面我添加了每个工作全屏版本的链接。

.focus()

 $("#test").focus(); 

小提琴 ( 更新 : 这在全屏幕中工作 )。

B. setTimeout with .focus()

 setTimeout(function(){ $("#test").focus(); },100); 

小提琴 ( 更新 : 这在全屏幕中工作 )。 正如这里所建议的, 这里和这里 。

.trigger('focus')

 $("#test").trigger('focus'); 

小提琴 ( 更新 : 这在全屏幕中工作 )。 如此处所示 。

D. setTimeout with .trigger('focus')

 setTimeout(function(){ $("#test").trigger('focus'); },100); 

小提琴 ( 更新 : 这在全屏幕中工作 )。 如此处所示 。

E.普通JavaScript

 document.getElementById("test").focus(); 

小提琴 ( 更新 : 这在全屏幕中工作 )。

F.使用纯JavaScript的setTimeout

 setTimeout('document.getElementById("test").focus();',100) 

小提琴 ( 更新 : 这在全屏幕中工作 )。 如此处所示 。

G .select()

 $("#test").select(); 

小提琴 ( 更新 : 这在全屏幕中工作 )。 如此处所示 。

H. setTimeout with .select()

 setTimeout(function(){ $("#test").select(); },100); 

小提琴 ( 更新 : 这在全屏幕中工作 )。

这可能是Mozilla需要修复的问题(参见此处 ),但似乎确实存在变通方法。 例如,如果您在Mac上使用Firefox浏览Google.com ,请关注input字段(我无法弄清楚Google是如何做到这一点的,尽管他们似乎正在处理此脚本中的重点)。

那么有人知道一个解决方法吗?

  

如果将autofocus属性添加到输入中,它可能会执行您要执行的操作。