我有一个输入字段。在某些条件下,我想让用户在按Tab键时将注意力集中在输入字段上。基本上我是在模仿Google自动填充搜索框的功能。我在每个浏览器中都能正常工作,除了我从未遇到过的问题...... Firefox!?
以下代码在IE,Chrome和Safari中按预期工作,如果您使用类myInput从文本框中删除Tab,则您的焦点将保留在文本框中。但是在Firefox中,当您从文本框中跳出Tab时,您将转到下一个文本框。 (这是我正在做的非常简化的版本。如果我可以使用它,我将能够使我的真实代码工作。)
$(document).ready(
function()
{
$(".myInput").blur
(
function()
{
$(this).focus();
$(this).select();
}
);
}
);
PS。请不要使用setTimeout()建议修复。感谢。
我读过文章描述了jQuery如何.focus()和javascript有.focus()以及它们是如何不一样的。我理解这一点(我认为),但我仍然无法弄清楚我做错了什么。
... ADDED 我可以这样工作
$(document).ready(
function()
{
$(".myInput").blur
(
function()
{
setTimeout("$('.myInput').focus();",1);
}
);
}
);
看似hackish但我无法弄清楚为什么Firefox不会把注意力集中在模糊上。所以,如果你们中的任何人都有答案,那就很高兴知道。
答案 0 :(得分:2)
当你使用jQuery时应该使用.focusout()方法。
http://api.jquery.com/focusout/
这与blur事件的区别在于它支持从父元素检测焦点丢失(换句话说,它支持事件冒泡)。
答案 1 :(得分:1)
我能够通过避免上述问题解决我的问题。
由于我正在处理Tab键,而不是试图将焦点放回用户选中的字段(如上面的尝试),我在Tab键上使用了preventDefault()。因此,焦点永远不会丢失,我不必担心更换它。
displayTextBox.keydown
(
function(event)
{
// 9 = Tab Key
if (event.keyCode == "9")
{
event.preventDefault();
}
}
);
我还没有彻底测试过这个,但到目前为止它似乎在FF,Chrome和IE中都有用。
答案 2 :(得分:0)
尝试使用html属性onfocusout