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

时间:2011-03-16 15:46:03

标签: javascript jquery focus setfocus

我有一个输入字段。在某些条件下,我想让用户在按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不会把注意力集中在模糊上。所以,如果你们中的任何人都有答案,那就很高兴知道。

3 个答案:

答案 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