0

私はレールアプリで作業しており、ブートストラップUIライブラリを実行しています。アプリケーションは、<= IE8 を除くすべてのブラウザで正常に動作しています ....

少し調査した後、エラーを生成していたコードの一部を見つけました。

コンパイルされた application.js :

 u.bind("keydown",function(t){0!==k.matches.length&&-1!==a.indexOf(t.which)&&(t.preventDefault(),40===t.which?(k.activeIdx=(k.activeIdx+1)%k.matches.length,k.$digest()):38===t.which?(k.activeIdx=(k.activeIdx?k.activeIdx:k.matches.length)-1,k.$digest()):13===t.which||9===t.which?k.$apply(function(){k.select(k.activeIdx)

および UI Bootstrap テンプレートがコンパイルされていない:

 element.bind('keydown', function (evt) {

    //typeahead is open and an "interesting" key was pressed
    if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {
      return;
    }

    evt.preventDefault();

    if (evt.which === 40) {
      scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;
      scope.$digest();

    } else if (evt.which === 38) {
      scope.activeIdx = (scope.activeIdx ? scope.activeIdx : scope.matches.length) - 1;
      scope.$digest();

    } else if (evt.which === 13 || evt.which === 9) {
      scope.$apply(function () {
        scope.select(scope.activeIdx);
      });

    } else if (evt.which === 27) {
      evt.stopPropagation();

      resetMatches();
      scope.$digest();
    }
  });

IE8 でこのバグを修正する方法を知っている人はいますか?

ありがとう :)

4

2 に答える 2

1

舞台裏にはもっとあるかもしれませんが、これが私が信じていることです。

evt.これは、IE の古いバージョンを除くほとんどのブラウザでのキー押下の標準ウォッチです。それらはwindow.event.keyCodeです。IE8 が event.which を処理しないため、エラーが発生した可能性があるようです。そのため、null 値です。これは、modernizrまたは html5 shim のいずれかでパッチを適用できます (shiv と呼ぶ人もいますが、shiv は武器であり、shim は小さなギャップを埋めるために使用されるアイテムであるため、shim はより簡潔です)。

関数に渡される前に、evt に、存在する場合は window.event にバインドするロジックがあり、そうでない場合はイベントにバインドされるロジックがあるかどうかを再確認します。そうでない場合は、以下のようにハッキングしてみてください。

var evt = evt || window.event;

繰り返しますが、舞台裏にはもっと多くのことがありますが、お金を賭けなければならない場合、これが問題になります.

于 2013-09-20T15:55:53.117 に答える