7

我在一个简单的聊天应用程序中使用文本区域。我想仅在用户按 shift+return 时启用回车,并在用户单独按回车键时提交表单。

我正在使用 ngKeydown 指令。问题是当我按回车键时,消息发送正常,文本区域被清除,然后插入回车符。这意味着事件不断传播......

这是HTML代码:

<textarea ng-model="messageTyped" ng-keydown="checkReturn($event)"></textarea>

这是angularjs代码:

function chatController($scope, ChatService) {

  $scope.messages = ChatService.messages

  $scope.checkReturn = function(event) {

    if (event.keyCode == 13 && !event.shiftKey) {

      event.stopPropagation() // <------ this line seems to have no effect

      // submit the message:
      if ($scope.messageTyped) {

        ChatService.SendMessage($scope.messageTyped)
        $scope.messageTyped = ""

      }
    }
  }
}

我不知道我错过了什么......感谢您的帮助!

4

2 回答 2

5

我建议为此编写一个自定义指令。然后你可以将它重用于你想要的任何元素。这是使用它移动到下一个输入元素的示例。只需将 enter-next 放在您想要拥有此功能的任何元素中。

.directive('enterNext', function() {
  return {
    restrict: 'A',
    link: function($scope,elem,attrs) {
      elem.bind('keydown', function(e) {
        var code = e.keyCode || e.which;
        if ((code === 13) && (e.shiftKey)) {
          e.preventDefault();
          elem.nextAll('input').first().focus();
        }
      });
    }
  }
});
于 2013-08-13T18:54:48.090 回答
0

可以使用 ng-keyup 完成,无需任何指令:

<textarea ng-keyup="$event.keyCode === 13 && (!$event.shiftKey) && TARGET_FUNCTION()"></textarea>
于 2016-09-01T21:28:34.560 回答