0

AngularUI の keypress ディレクティブを使用していますが、問題が発生しています。テキスト フィールドを作成し、キープレス イベントをアタッチすることができます (基本的には、AngularUI ページのデモにあるものとまったく同じです)。

<textarea ui-keypress="{13:'keypressCallback($event)'}">

ページのボタンにホット キーを登録しようとしていますが、同じ ui-keypress イベントをボタン (またはページの本文) にアタッチすると機能しません。ホットキーを機能させるにはどうすればよいですか?

4

2 に答える 2

2

あなたのものを構築します。私が行った方法は、キープレス用とキーアップ用の2つのディレクティブを作成することです

モジュール (私は yourapp と呼びます) を作成したら、ディレクティブを作成します。

yourapp.directive('keyPress', function () {
  return function (scope, elm, attrs) {
    elm.bind('keypress', function (e) {
      var intKey = (window.Event) ? e.which : e.keyCode;
      if (intKey === attrs.key) {
        if (scope.theater === 1) {
          scope.$apply(attrs.keyPress);
        }
      }
    });
  };
});

yourapp.directive('keyUp', function () {
  return function (scope, elm, attrs) {
    elm.bind('keyup', function (e) {
      var intKey = (window.Event) ? e.which : e.keyCode;
      if (intKey === attrs.key) {
        if (scope.theater === 1) {
          scope.$apply(attrs.keyUp);
        }
      }
    });
  };
});

したがって、次のように使用できます。

<div key-press="doSomething()" key="13"> // enter
<div key-up="doSomething()" key="27"> // esc

:これ(window.Event) ? e.which : e.keyCode;により、クロスブラウザになります。

于 2013-02-05T16:44:54.387 に答える
2

keyup または keydown を試してください。一部のキーは keypress で機能しません (ui-keyup、ui-keydown も存在します)。

于 2013-02-06T00:28:16.293 に答える