IE8行jQuery错误“elem [type]();”

时间:2013-01-31 09:45:01

标签: javascript jquery internet-explorer-8

我在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执行导致了这个问题。

任何提示都将不胜感激。

2 个答案:

答案 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){}