1

IE8でjQuery1.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が指摘)。コード内の呼び出しを検索したところ、.focusjQuery-ui、jquery.validate、およびコード自体などのサードパーティに分散された約50の呼び出しでした。他のサードパーティライブラリを変更する代わりに、jQuery1.8.3自体を変更することにしました。

そこで、jQuery-1.8.3.jsの次の行2973を変更しました。

elem[ type ]();

に:

try {
  this.newelement[0].focus();
} catch(err){}
于 2013-01-31T10:45:43.113 に答える