防止Keypress事件(f.e。enter-key)

时间:2015-09-21 07:34:30

标签: angular-ui-grid

我正在寻找来自ui-grid的停止键盘事件。例如:按住enter键,ui-grid导航到下一行,这里我需要阻止此操作。即使使用实现ng-keypress-listener的cellTemplate,也无法通过按Enter键来阻止ui-grid切换到下一行。

有谁知道如何阻止ui-grid或关闭键盘事件?

2 个答案:

答案 0 :(得分:4)

它像魅力一样,非常感谢:)

我现在使用装饰器服务来覆盖ui-grid的方法getDirection。

FYI。这是代码:

angular
.module('app')
.config(function($provide){
  $provide.decorator('uiGridCellNavService', function ($delegate, uiGridConstants, uiGridCellNavConstants) {
    var getDirection = $delegate.getDirection;
    $delegate.getDirection = function (evt) {
      if (evt.keyCode === uiGridConstants.keymap.LEFT ||
        (evt.keyCode === uiGridConstants.keymap.TAB && evt.shiftKey)) {
        return uiGridCellNavConstants.direction.LEFT;
      }
      if (evt.keyCode === uiGridConstants.keymap.RIGHT ||
        evt.keyCode === uiGridConstants.keymap.TAB) {
        return uiGridCellNavConstants.direction.RIGHT;
      }

      if (evt.keyCode === uiGridConstants.keymap.UP ||
        (evt.keyCode === uiGridConstants.keymap.ENTER && evt.shiftKey) ) {
        return uiGridCellNavConstants.direction.UP;
      }

      if (evt.keyCode === uiGridConstants.keymap.PG_UP){
        return uiGridCellNavConstants.direction.PG_UP;
      }
      // delete listener for key ENTER
      if (evt.keyCode === uiGridConstants.keymap.DOWN) {
        return uiGridCellNavConstants.direction.DOWN;
      }
      // original code
      /*if (evt.keyCode === uiGridConstants.keymap.DOWN ||
        evt.keyCode === uiGridConstants.keymap.ENTER) {
        return uiGridCellNavConstants.direction.DOWN;
      }*/

      if (evt.keyCode === uiGridConstants.keymap.PG_DOWN){
        return uiGridCellNavConstants.direction.PG_DOWN;
      }

      return null;
    };
    return $delegate;
  })

答案 1 :(得分:0)

您可以通过覆盖其服务/指令来调整默认功能。

我为您的案例创建了Plunkr

复制包含keyLavner for cellNavigation的整个服务,并删除ENTER - 观察者。

getDirection: function (evt) {
      if (evt.keyCode === uiGridConstants.keymap.LEFT ||
        (evt.keyCode === uiGridConstants.keymap.TAB && evt.shiftKey)) {
        return uiGridCellNavConstants.direction.LEFT;
      }
      if (evt.keyCode === uiGridConstants.keymap.RIGHT ||
        evt.keyCode === uiGridConstants.keymap.TAB) {
        return uiGridCellNavConstants.direction.RIGHT;
      }

      /*
      if (evt.keyCode === uiGridConstants.keymap.UP ||
        (evt.keyCode === uiGridConstants.keymap.ENTER && evt.shiftKey) ) {
        return uiGridCellNavConstants.direction.UP;
      }
      */

      if (evt.keyCode === uiGridConstants.keymap.PG_UP){
        return uiGridCellNavConstants.direction.PG_UP;
      }

      /*
      if (evt.keyCode === uiGridConstants.keymap.DOWN ||
        evt.keyCode === uiGridConstants.keymap.ENTER && !(evt.ctrlKey || evt.altKey)) {
        return uiGridCellNavConstants.direction.DOWN;
      }
      */

      if (evt.keyCode === uiGridConstants.keymap.PG_DOWN){
        return uiGridCellNavConstants.direction.PG_DOWN;
      }

      return null;
},

direction.UPdirection.DOWN检查已注释掉,但其他所有检查都按预期工作。我在Plunkr app.js。

的底部添加了服务