AngularJS提交关于按键的模糊和模糊

时间:2013-08-22 19:45:12

标签: angularjs keypress blur

我想在输入字段模糊时向服务器提交一些数据。用户还应该能够通过按Enter键来模糊输入字段。

不幸的是,结果如下:$rootScope:inprog: $apply already in progress error

Plunkr - 提前致谢!

2 个答案:

答案 0 :(得分:10)

以下是发生的事情:

  • 您按Enter键
  • ng-keydown触发器(摘要开始)
  • 您致电target.blur()
  • ng-blur触发并尝试启动另一个摘要周期
  • Angular抱怨

模糊是同步执行的,并立即触发处理程序而不完成第一个摘要。

在我看来,这不是你的代码的问题,而是一个Angular bug。我一直在努力想出一个更好的解决方案,但我只能找到:

app.controller('BlurCtrl', function($scope, $timeout) {
  $scope.blurModel = "I'm the value"

    $scope.blurOnEnter = function( $event ) {
      if ( $event.keyCode != 13 )
        return

      // this will finish the current digest before triggering the blur
      $timeout(function () { $event.target.blur() }, 0, false);
    }

    $scope.onBlur = function() {
    $scope.result = this.blurModel
    }
})

答案 1 :(得分:4)

您可以结帐Angular UI @ http://angular-ui.github.io/ui-utils/

提供详细信息事件句柄相关模糊,焦点,键盘,键盘,按键

<input ui-event="{ blur : 'blurCallback()' }">
<textarea ui-keypress="{13:'keypressCallback($event)'}"></textarea>
<textarea ui-keydown="{'enter alt-space':'keypressCallback($event)'}"> </textarea>
<textarea ui-keydown="{27:'keydownCallback($event)'}"></textarea>
<textarea ui-keydown="{'enter alt-space':'keypressCallback($event)'}"> </textarea>
<textarea ui-keyup="{'enter':'keypressCallback($event)'}"> </textarea>