".focus()在Firefox中无法将焦点设置到目标输入框"

3
我有一个输入框。在某些情况下,当用户按下Tab键时,我希望保持用户专注于输入框。基本上,我正在模仿Google的自动填充搜索框的功能。如果使用类myInput的文本框,以下代码在IE、Chrome和Safari中都能正常工作,如果您使用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);
            }
        );      
    }
);

似乎有点瑕疵,但我想不出为什么 Firefox 在失焦后无法设置焦点。因此,如果你们中的任何人有答案,那就太好了。


你有尝试过调试你的代码吗?在你的模糊处理程序内,$(this)是指什么?它甚至有触发到吗? - Mike Dinescu
我猜测$(this)指的是$(".myInput")文本框,因为这段代码在Chrome和IE中都能正常工作。这段代码将不允许你在IE和Chrome中通过Tab键离开class为.myInput的文本框,所以我认为$(this)已经正确地定位了目标。而我的FireFox错误控制台也没有报告任何错误。 - Stephen Stanley
http://stackoverflow.com/questions/4236477/firefox-weird-onblur-behavior-3-6-12http://stackoverflow.com/questions/4640687/javascript-onchange-onblur-and-focus-weirdness-in-firefox - Fraser
3个回答

2

由于您正在使用jQuery,应该使用.focusout()方法。

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

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


我已经看到了 .focusout,并用 .focusout 替换了 .blur,但是结果相同。在 IE 和 Chrome 中,您无法从文本框中切换选项卡,在 FF 中可以。在所有情况下,.focusout 或 .blur 中的代码都会触发。就像 alert() 一样,但是 FF 不会遵守 .focus()。 - Stephen Stanley
$('.myInput').live('focusout', function() { $('.myInput').focus(); }); $('.myInput').在失去焦点时,执行以下函数:{ $('.myInput').获得焦点(); }; - Fraser

2
我通过避免上述问题成功解决了我的情况。
由于我正在处理Tab键,而不是尝试将焦点放回用户离开的字段(如上面的尝试),我在Tab键上使用了preventDefault()。因此,焦点永远不会丢失,我也不必担心替换它。
displayTextBox.keydown
(
    function(event)
    {           
        // 9 = Tab Key
        if (event.keyCode == "9")
        {
            event.preventDefault();
        }
    }
);

我没有进行全面测试,但目前看来在FF、Chrome和IE中都可以正常工作。


0
尝试使用HTML属性onfocusout

有何用处?又有何价值? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接