1

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

任何提示将不胜感激。

4

2 回答 2

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
} 

解决方案是使用setTimeout

setTimeout(function() {
    document.getElementById('add-comment-login-overlay-username-input').focus()
}, 0)

我曾经多次遇到过这种情况,包括使用 jQuery。这不是任何图书馆的错。setTimeout一直为我工作。

于 2013-01-31T09:55:58.350 回答
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){}
于 2013-01-31T10:45:43.113 回答