.focus()“设置焦点在目标输入上”在Firefox中不起作用

我有一个输入字段。 在某些情况下,我想让用户在按Tab键时将注意力集中在输入字段上。 基本上我是在模仿Google自动填充搜索框的function。 我在每个浏览器中都能正常工作,除了我从未遇到过的问题…… Firefox !?

以下代码在IE,Chrome和Safari中按预期工作,如果您使用类myInput从文本框中跳出Tab,则您的焦点将保留在文本框中。 但是在Firefox中,当您从文本框中跳出Tab时,您将转到下一个文本框。 (这是我正在做的非常简化的版本。如果我可以让它工作,我将能够让我的真实代码工作。)

$(document).ready( function() { $(".myInput").blur ( function() { $(this).focus(); $(this).select(); } ); } ); 

PS。 请不要使用setTimeout()建议修复。 谢谢。

我已经阅读过文章,描述了jQuery如何.focus()和javascript有.focus()以及它们是如何不同的。 我理解这一点(我认为),但我仍然无法弄清楚我做错了什么。

添加……我可以通过这种方式工作

 $(document).ready( function() { $(".myInput").blur ( function() { setTimeout("$('.myInput').focus();",1); } ); } ); 

看似hackish但我无法弄清楚为什么Firefox不会把注意力集中在模糊上。 所以,如果你们中的任何人都有答案,那就知道了。

在使用jQuery时应该使用.focusout()方法。

http://api.jquery.com/focusout/

这与blur事件的不同之处在于它支持从父元素检测焦点丢失(换句话说,它支持事件冒泡)。

我能够通过避免上面的问题解决我的情况。

因为我正在处理Tab键,而不是试图将焦点放回用户选项卡的字段(就像我上面的尝试),我在Tab键上使用了preventDefault()。 因此,焦点永远不会丢失,我不必担心更换它。

 displayTextBox.keydown ( function(event) { // 9 = Tab Key if (event.keyCode == "9") { event.preventDefault(); } } ); 

我还没有彻底测试过这个,但到目前为止它似乎在FF,Chrome和IE中都有用。

尝试使用html属性onfocusout