当我注意到一些非常特殊的东西时,我一直在测试这个other question。 FF4 / 5无法触发focus
jQuery事件。可能被认为是重复的The other question被关闭并被接受而没有真正的答案。
对于问题本身,我尝试了以下简单的代码:
$('#target').focusout(function() {
$(this).focus();
});
它在Chrome和IE中运行良好,但在FF上失败。这是我们中懒人的 jsFiddle 。
任何人都可以解释这种行为吗?或者它是一个已知的错误?
答案 0 :(得分:48)
我想我之前遇到过这种情况,如果我没记错的话,它似乎是某种重入问题。我的印象是,因为FF已经在转换焦点的过程中,它不会让你启动另一个焦点转换。我相信我的解决方法就像是
$('#target').focusout(function() {
setTimeout(function() {
$(this).focus();
}, 0);
});
答案 1 :(得分:3)
manual表示aboult .focus()
致电
此方法是.trigger('focus')
的快捷方式
和.trigger()
主题
尽管.trigger()模拟事件激活,但是使用合成的事件对象,它并不能完美地复制自然发生的事件。
据我了解,调用$(this).focus();
应该触发OnFocus事件(如果有一个附加到对象),但不保证实际设置/更改焦点对象。
答案 2 :(得分:0)
这在Firefox 38中对我有用。我需要测试不同的延迟ms。感谢@camaleo评论。
$(document).ready(function() {
setTimeout(function() { $('#myid').focus(); }, 100);
});
答案 3 :(得分:0)
现在焦点似乎在最新的Firefox中不需要setTimeout函数。
如果你还要选择输入字段,你必须使用.select()函数作为document.execCommand(' SelectAll');似乎也不适用于Firefox。
因此,让输入字段首先聚焦然后选择你然后可以复制它或用它做你想做的任何事情。
在我的用例中,如果有人按下复制按钮,我需要从输入字段中复制网址:
$(".copyURL").click(function(){
$(this).prev().focus().select();
document.execCommand("Copy",false,null);
});
我希望这可以帮助其他任何寻找此问题的人!