最近、IE7 / 8をサポートする必要があるため、社内のWebサイトにSelectivizrを実装しました。残念ながら、私たちのサイトはjQuery/AJAXを介して多くの動的コンテンツの読み込みを行っています。
この問題を解決するために、jQuery ready関数をオーバーロードして、設定されたタスクを実行した後にSelectivizrをリロードしました。私のコードは次のようになります:
$(function () {
if ($('body.ie8, body.ie7, body.comp-view8, body.comp-view7').length > 0) {
(function () {
var original = jQuery.fn.ready;
var getSelectivizr;
jQuery.fn.ready = function () {
// Execute the original method.
original.apply(this, arguments);
clearTimeout(getSelectivizr);
getSelectivizr = setTimeout(function () {
$.getScript(selectivizr);
}, 50);
}
})();
}
});
十分に単純です。しかし、最近、チームメートが関連していると思われるバグを発見しました。IE8 / 7では、ページに動的にロードされる選択ドロップダウン(静的ドロップダウンが有効になっているかどうかはわかりませんが、これらのページに静的ドロップダウンがないかどうかはわかりません)では、2回クリックして開く必要があります。
具体的には、IE8 / 7では、最初のクリックでドロップダウンに「フォーカス」されているように見え、2回目のクリックでドロップダウンが開きます。互換表示です。実際には一瞬開いてから閉じます。2回目のクリックで問題なく開きます(ドロップダウンに集中している限り)。
Selectivizrは動的にロードされたコンテンツで動作するように設計されていないため、これが問題である可能性があると想定していましたが、少しデバッグした後、この奇妙な動作を引き起こしているのはsetTimeoutのようです。
Selectivizrの実装を削除せずにこれを修正する方法がまったくわかりません。
異なるAJAX呼び出しが行われた場合に、ブラウザーがSelectivizrを複数回ロードしようとするのを防ぐために、setTimeoutが必要であることに注意してください。これにより、ブラウザー内で重大なパフォーマンスの問題が発生する可能性があります。
注:この質問は、タイトルに記載されている問題を正確に反映していないため、検索を改善するために更新しました。数週間後にこの問題に戻った後、最初のデバッグが私を間違った道に導いたことに気づきました。申し訳ありませんが、私はこれに対する答えを提供しました。これがお役に立てば幸いです!:)