jQuery Focus在firefox上失败了

当我注意到一些非常特殊的东西时,我一直在测试另一个问题 。 FF4 / 5无法触发focus jQuery事件。 可能被认为是重复的另一个问题已经结束并被接受而没有真正的答案。

对于问题本身,我尝试了以下简单的代码:

 $('#target').focusout(function() { $(this).focus(); }); 

它在Chrome和IE中运行良好,但在FF上失败。 这是我们中间懒人的jsFiddle

谁能解释这种行为? 或者它是一个已知的错误?

我想我之前遇到过这种情况,如果我没记错的话,这似乎是某种重入问题。 我的印象是,因为FF已经在转换焦点的过程中,它不会让你启动另一个焦点转换。 我相信我的解决方法就像

 $('#target').focusout(function() { setTimeout(function() { $(this).focus(); }, 0); }); 

手册说aboult .focus()调用

此方法是.trigger(’focus’)的快捷方式

并从.trigger()主题

尽管.trigger()模拟事件激活,但是使用合成的事件对象,它并不能完美地复制自然发生的事件。

据我所知,调用$(this).focus(); 应该触发OnFocus事件(如果有一个附加到对象)但不保证实际设置/更改聚焦对象。

这在Firefox 38中对我有用。我需要测试不同的延迟ms。 感谢@camaleo评论。

 $(document).ready(function() { setTimeout(function() { $('#myid').focus(); }, 100); }); 

焦点似乎现在在最新的Firefox中工作,而不需要setTimeout函数。

如果你还想选择输入字段,你必须使用.select()函数作为document.execCommand(’SelectAll’); 似乎也不适用于Firefox。

因此,让输入字段首先聚焦然后选择,然后可以复制它或用它做任何你想做的事情。

在我的用例中,如果有人按下复制按钮,我需要从输入字段中复制url:

 $(".copyURL").click(function(){ $(this).prev().focus().select(); document.execCommand("Copy",false,null); }); 

我希望这可以帮助其他正在寻找这个问题的人!