3

我有一个输入字段。在某些情况下,我希望用户在点击 Tab 键时将注意力集中在输入字段上。基本上我在模仿谷歌自动填充搜索框的功能。除了我从未遇到过问题的浏览器之外,我在每个浏览器中都可以正常工作... Firefox!?

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

$(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);
            }
        );      
    }
);

看起来很老套,但我不明白为什么 Firefox 不会专注于模糊。所以,如果你们中的任何人有答案,很高兴知道。

4

3 回答 3

2

当你使用 jQuery 时,应该使用 .focusout() 方法。

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

这与 blur 事件不同,它支持检测父元素失去焦点(换句话说,它支持事件冒泡)。

于 2011-03-16T16:24:59.100 回答
1

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

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

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

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

于 2011-03-16T18:04:20.853 回答
0

尝试使用 html 属性onfocusout

于 2011-03-16T15:47:56.357 回答