提问人:Madara's Ghost 提问时间:8/13/2011 最后编辑:CommunityMadara's Ghost 更新时间:1/8/2017 访问量:23989
jQuery Focus 在 firefox 上失败
jQuery Focus fails on firefox
问:
我一直在为另一个问题进行一些测试,当我注意到一些非常奇怪的事情时。FF4/5 无法触发 jQuery 事件。另一个可能被视为重复的问题被关闭并被接受,但没有真正的答案。focus
对于问题本身,我尝试了以下简单的代码:
$('#target').focusout(function() {
$(this).focus();
});
它在 Chrome 和 IE 中运行良好,但在 FF 上失败。这是我们中间懒惰者的 jsFiddle。
谁能解释这种行为?还是已知错误?
答:
我想我以前遇到过这个问题,如果我没记错的话,这似乎是某种重入问题。我的印象是,因为FF已经在转移焦点的过程中,它不会让你发起另一个焦点转移。我相信我的解决方法是这样的
$('#target').focusout(function() {
setTimeout(function() {
$(this).focus();
}, 0);
});
评论
focus()
focusout()
手册上写着 aboult call.focus()
此方法是 .trigger('focus') 的快捷方式
和 .trigger()
主题
尽管 .trigger() 模拟了事件激活,并完成了合成的事件对象,但它并不能完美地复制自然发生的事件。
因此,据我了解,该调用应该触发 OnFocus 事件(如果有一个附加到对象),但不会实际设置/更改焦点对象。$(this).focus();
评论
这在 Firefox 38 中对我有用。我需要测试不同的延迟毫秒。感谢@camaleo评论。
$(document).ready(function() {
setTimeout(function() { $('#myid').focus(); }, 100);
});
焦点现在似乎在最新的 Firefox 中起作用,不需要 setTimeout 函数。
如果您还想选择输入字段,则必须使用 .select() 函数,但作为 document.execCommand('SelectAll');似乎也不适用于 Firefox。
因此,首先聚焦输入字段,然后选择输入字段,然后您可以复制它或对它做任何您想做的事情。
在我的用例中,如果有人按下了复制按钮,我需要从输入字段中复制 url:
$(".copyURL").click(function(){
$(this).prev().focus().select();
document.execCommand("Copy",false,null);
});
我希望这可以帮助任何正在寻找这个问题的人!
评论
上一个:你如何正确地承诺请求?
下一个:MVC 路由如何工作?
评论