ショッピング カート アプリケーションの数量フィールドに jQuery UI 1.9 スピナーを使用しようとしていますが、IE6 から 9 (およびおそらく 10) に影響する問題に遭遇しましたが、Firefox や Chrome には影響しません。
問題は、スピナー定義の変更イベントにあるコードが、入力フィールド自体に最初にフォーカスが適用されずに、スピナーが 1 回だけスピンされたときに IE で起動しないことです。つまり、上下のスピン ボタンをクリックするだけです。選択されていないスピナーをクリックしてからスピナーをクリックすると、変更イベントは発生しません。
編集 - 問題を説明するために、これ用のjsfiddleを作成しました。問題はIE6~9で発生し、10では試していません。
IE では、フォーカスがスピナーの入力フィールドにないことを確認し、スピナーの追加矢印を 1 回クリックしてから、ページの他の場所をクリックします。アラートは表示されません。興味深いことに、最初に入力フィールドにフォーカスを置いた場合、つまり、入力フィールドをクリックし、次にスピナーの矢印をクリックしてからクリックして離すと、問題は発生しません。
jsfiddle は、変更イベントが発生していないことを示していますが、jQuery Github ページからソースを実行しているため、IE のスピナーの内部動作内で発生している追加のフォーカス イベントを表示できません。
私が行ったことではないことを確認するために、現在の 1.9m7 マイルストーン リリースのすべてのデモ ファイルのコピーを取得し、それを使用して再現しました。この問題を確認するために、何が起こっているかを確認するためにいくつかのコンソール ログ メッセージを追加しました。
IE9 では、追加のフォーカス イベントが _events フォーカス (jquery.ui.spinner.js 内) で発生します。
これは、this.previous を 2 回更新する効果があるため、最初は (他のブラウザーと同様に) 正しいですが、2 回目のフォーカスにより、this.previous が現在の値と同じ値に設定されます。イベントが発生し、 this.previous !== this.element.val() が同じであるかどうかをチェックし、変更は発生しません。
この問題は、複数回スピンした場合には発生しません。これは、余分なフォーカスが発生しないため、以前の値が正しいままであるためです。余分なフォーカスがどこでトリガーされているか、または回避策があるかどうかを特定するのを手伝ってくれる人はいますか?
作業中のプロジェクトでこれを解決する必要があり、この段階でスピナーを削除する必要はありません。jQuery のクロスブラウザー互換性の目的を考えると、数年前から存在しているウィジェットのクロスブラウザー互換性に影響を与えるような根本的な問題があるとは信じがたいです (現在のリリースにはまだ含まれていません)。これまで誰も気づかなかったのはどうしてですか?