我在IE8中使用jQuery 1.7.2,1.8.0或1.8.3时遇到问题。该网页适用于Chrome,Firefox,IE9,Safari和Opera。
在IE8中,它会在开发人员工具中提示以下错误:
Can't move focus to the control because it is invisible, not enabled, or of a type that does not accept the focus
此错误发生在jQuery 1.8.0和1.8.3中的第2973行(在1.7.2中是第3242行):elem[ type ]();
函数中存在trigger
。
我该如何解决这个问题?或者至少知道哪个trigger
执行导致了这个问题。
任何提示都将不胜感激。
答案 0 :(得分:1)
这是IE中的一个老问题(很高兴知道它已在8中修复)。我不知道官方的原因,但是我认为它与IE重新绘制DOM之前没有重新绘制,直到执行上下文完成,同时尝试focus()
元素,而它认为它仍然隐藏:
function calledAtSomePoint() { // begin execution
// ...
element.style.display = ''; // show container
input.focus(); // IE thinks element is hidden
// end of execution, IE repaints the DOM but it's too late
}
The solution is to use setTimeout
:
setTimeout(function() {
document.getElementById('add-comment-login-overlay-username-input').focus()
}, 0)
我已经多次使用它,包括使用jQuery。这不是任何图书馆的错。 setTimeout
一直在为我解决问题。
答案 1 :(得分:1)
阅读此帖http://bugs.jquery.com/ticket/10859后(@nez在评论中指出)。我在我的代码中搜索了.focus
个调用,大约有50个调用分布在第三方,如jQuery-ui,jquery.validate和我的代码本身。我决定改变jQuery 1.8.3本身,而不是改变一堆其他的第三方库。
所以我在jQuery-1.8.3.js中更改了以下第2973行:
elem[ type ]();
为:
try {
this.newelement[0].focus();
} catch(err){}